Browser not working! Please help :( - Java for Android App Development

Hi, I was trying to make a browser. But obviously, its not working. Please help me out. I will be providing all the codes here:
Thanks in advance ...
manifest:
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.browser"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-premission android:name="android.content.permissions.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.browser.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.browser.ta"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.TA" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
MainActivity.class:
Code:
package com.example.browser;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity implements OnClickListener {
EditText search = (EditText) findViewById(R.id.editText1);
WebView wb = (WebView) findViewById(R.id.webView1);
Button back = (Button) findViewById(R.id.button2);
Button forward = (Button) findViewById(R.id.button1);
Button Bsearch = (Button) findViewById(R.id.dd);
String s = search.getText().toString();
ta t = new ta();
[user=439709]@override[/user]
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wb.getSettings().setBuiltInZoomControls(true);
wb.getSettings().setJavaScriptEnabled(true);
wb.getSettings().setLoadWithOverviewMode(true);
wb.getSettings().setSavePassword(true);
wb.getSettings().setAllowFileAccess(true);
back.setOnClickListener(this);
forward.setOnClickListener(this);
Bsearch.setOnClickListener(this);
wb.setWebViewClient(t);
wb.loadUrl("http://www.google.com");
}
[user=439709]@override[/user]
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.dd: // search
ProgressDialog d = ProgressDialog.show(this, "loading",
"Please wait");
wb.loadUrl("http://" + s);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(search.getWindowToken(), 0);
break;
case R.id.button2: // back
if (wb.canGoBack())
wb.goBack();
break;
case R.id.button1: // forward
if (wb.canGoForward())
wb.goForward();
break;
}
}
}
ta.class:
Code:
package com.example.browser;
import android.app.ProgressDialog;
import android.content.Context;
import android.view.inputmethod.InputMethodManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class ta extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView v, String url) {
v.loadUrl(url);
return true;
}
}

Logcat?

nikwen said:
Logcat?
Click to expand...
Click to collapse
Sorry, I completely forgot, about that!!
Here it is:
Code:
07-14 16:12:46.367: E/AndroidRuntime(287): FATAL EXCEPTION: main
07-14 16:12:46.367: E/AndroidRuntime(287): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.browser/com.example.browser.MainActivity}: java.lang.NullPointerException
07-14 16:12:46.367: E/AndroidRuntime(287): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
07-14 16:12:46.367: E/AndroidRuntime(287): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
07-14 16:12:46.367: E/AndroidRuntime(287): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
07-14 16:12:46.367: E/AndroidRuntime(287): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
07-14 16:12:46.367: E/AndroidRuntime(287): at android.os.Handler.dispatchMessage(Handler.java:99)
07-14 16:12:46.367: E/AndroidRuntime(287): at android.os.Looper.loop(Looper.java:123)
07-14 16:12:46.367: E/AndroidRuntime(287): at android.app.ActivityThread.main(ActivityThread.java:4627)
07-14 16:12:46.367: E/AndroidRuntime(287): at java.lang.reflect.Method.invokeNative(Native Method)
07-14 16:12:46.367: E/AndroidRuntime(287): at java.lang.reflect.Method.invoke(Method.java:521)
07-14 16:12:46.367: E/AndroidRuntime(287): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-14 16:12:46.367: E/AndroidRuntime(287): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-14 16:12:46.367: E/AndroidRuntime(287): at dalvik.system.NativeStart.main(Native Method)
07-14 16:12:46.367: E/AndroidRuntime(287): Caused by: java.lang.NullPointerException
07-14 16:12:46.367: E/AndroidRuntime(287): at android.app.Activity.findViewById(Activity.java:1637)
07-14 16:12:46.367: E/AndroidRuntime(287): at com.example.browser.MainActivity.<init>(MainActivity.java:17)
07-14 16:12:46.367: E/AndroidRuntime(287): at java.lang.Class.newInstanceImpl(Native Method)
07-14 16:12:46.367: E/AndroidRuntime(287): at java.lang.Class.newInstance(Class.java:1429)
07-14 16:12:46.367: E/AndroidRuntime(287): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
07-14 16:12:46.367: E/AndroidRuntime(287): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
07-14 16:12:46.367: E/AndroidRuntime(287): ... 11 more

Read This http://forum.xda-developers.com/showthread.php?t=2325164
then look at your logcat
Code:
07-14 16:12:46.367: E/AndroidRuntime(287): Caused by: java.lang.NullPointerException
07-14 16:12:46.367: E/AndroidRuntime(287): at android.app.Activity.findViewById(Activity.java:1637)
07-14 16:12:46.367: E/AndroidRuntime(287): at com.example.browser.MainActivity.<init>(MainActivity.java:17)
then count from the top, and your error is your edittext

I looked at the edit-text. But i still cannot find any wrong. However, I modified one of my buttons with this:
Code:
case R.id.dd: // search
wb.loadUrl("http://" + search.getText().toString());
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(search.getWindowToken(), 0);
break;
Still. no help...
Code:
07-14 16:12:46.367: E/AndroidRuntime(287): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.browser/com.example.browser.MainActivity}: java.lang.NullPointerException
What is this about??
I think, there is something wrong with the manifest, Please take a look at it!

read nikwens debugging guide I linked again.
then here
07-14 16:12:46.367: E/AndroidRuntime(287): at com.example.browser.MainActivity.<init>(MainActivity.java:17
thats the name of your app, and the line you have the problem at.
nullpointers could be a million things, look for your app and the line it errors on.
also intent.action.TA isnt a thing. take that out.

out of ideas said:
read nikwens debugging guide I linked again.
then here
07-14 16:12:46.367: E/AndroidRuntime(287): at com.example.browser.MainActivity.<init>(MainActivity.java:17
thats the name of your app, and the line you have the problem at.
nullpointers could be a million things, look for your app and the line it errors on.
also intent.action.TA isnt a thing. take that out.
Click to expand...
Click to collapse
Hey, thanks for linking it.
It even tells you that the method which fails is findViewById().

nikwen said:
Hey, thanks for linking it.
It even tells you that the method which fails is findViewById().
Click to expand...
Click to collapse
Yeah, you were right, there were couple of wrong ids, in that code. But I have edited all of them now.. Still the app is crashing and I am getting the same error, for "findByView".
I am also pasting, the new code and the UI xml.
activity_main.xml:
Code:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<EditText
android:id="@+id/editText1"
android:layout_width="291dp"
android:layout_height="wrap_content"
android:layout_x="0dp"
android:layout_y="4dp"
android:hint="Enter Search!" />
<WebView
android:id="@+id/webView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignLeft="@+id/editText1"
android:layout_alignParentBottom="true"
android:layout_below="@+id/back" />
<Button
android:id="@+id/s"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignTop="@+id/back"
android:text="Search" />
<Button
android:id="@+id/dd"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText1"
android:layout_toRightOf="@+id/s"
android:text="Forward" />
<Button
android:id="@+id/back"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/dd"
android:layout_alignBottom="@+id/dd"
android:layout_toRightOf="@+id/dd"
android:text="Back" />
</RelativeLayout>
MainActivity:
Code:
package com.example.browser;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity implements OnClickListener {
EditText search = (EditText) findViewById(R.id.editText1);
WebView wb = (WebView) findViewById(R.id.webView1);
Button back = (Button) findViewById(R.id.s);
Button forward = (Button) findViewById(R.id.back);
Button Bsearch = (Button) findViewById(R.id.dd);
ta t = new ta();
[user=439709]@override[/user]
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
back.setOnClickListener(this);
forward.setOnClickListener(this);
Bsearch.setOnClickListener(this);
wb.loadUrl("http://www.google.com");
wb.setWebViewClient(t);
}
[user=439709]@override[/user]
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.dd: // search
wb.loadUrl("http://" + search.getText().toString());
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(search.getWindowToken(), 0);
break;
case R.id.back: // back
if (wb.canGoBack())
wb.goBack();
break;
case R.id.s: // forward
if (wb.canGoForward())
wb.goForward();
break;
}
}
}
Please help me out! I know I am dumb. But I am learning it all by myself, without a mentor at the age of 16. Its little complex for me. I have spent, a lot of time finding the error. But its not working.

It doesn't like trying to find the view where you are declaring your variables. The findviewbyid should be moved in to your oncreate.
This works:
Code:
public class MainActivity extends Activity implements OnClickListener {
EditText search;
WebView wb;
Button back;
Button forward;
Button Bsearch;
ta t = new ta();
[user=439709]@override[/user]
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
search = (EditText) findViewById(R.id.editText1);
wb = (WebView) findViewById(R.id.webView1);
back = (Button) findViewById(R.id.s);
forward = (Button) findViewById(R.id.back);
Bsearch = (Button) findViewById(R.id.dd);
back.setOnClickListener(this);
forward.setOnClickListener(this);
Bsearch.setOnClickListener(this);
wb.loadUrl("http://www.google.com");
wb.setWebViewClient(t);
}
After looking in to the reason why it would crash, my only educated guess is because you are trying to find the view without the view being set. View is set in the oncreate method.

zalez said:
It doesn't like trying to find the view where you are declaring your variables. The findviewbyid should be moved in to your oncreate.
This works:
Code:
public class MainActivity extends Activity implements OnClickListener {
EditText search;
WebView wb;
Button back;
Button forward;
Button Bsearch;
ta t = new ta();
[user=439709]@override[/user]
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
search = (EditText) findViewById(R.id.editText1);
wb = (WebView) findViewById(R.id.webView1);
back = (Button) findViewById(R.id.s);
forward = (Button) findViewById(R.id.back);
Bsearch = (Button) findViewById(R.id.dd);
back.setOnClickListener(this);
forward.setOnClickListener(this);
Bsearch.setOnClickListener(this);
wb.loadUrl("http://www.google.com");
wb.setWebViewClient(t);
}
After looking in to the reason why it would crash, my only educated guess is because you are trying to find the view without the view being set. View is set in the oncreate method.
Click to expand...
Click to collapse
Code:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
search = (EditText) findViewById(R.id.editText1);
wb = (WebView) findViewById(R.id.webView1);
back = (Button) findViewById(R.id.s);
forward = (Button) findViewById(R.id.back);
Bsearch = (Button) findViewById(R.id.dd);
back.setOnClickListener(this);
forward.setOnClickListener(this);
Bsearch.setOnClickListener(this);
wb.loadUrl("http://www.google.com");
wb.setWebViewClient(t);
}
I modified my code, with this.. But, its still crashing

Post your entire MainActivity.class. I copied all of your code and changed what I posted back and do not get a crash.
This is working for me:
Code:
package com.example.browser;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity implements OnClickListener {
EditText search;
WebView wb;
Button back;
Button forward;
Button Bsearch;
ta t = new ta();
[user=439709]@override[/user]
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
search = (EditText) findViewById(R.id.editText1);
wb = (WebView) findViewById(R.id.webView1);
back = (Button) findViewById(R.id.s);
forward = (Button) findViewById(R.id.back);
Bsearch = (Button) findViewById(R.id.dd);
back.setOnClickListener(this);
forward.setOnClickListener(this);
Bsearch.setOnClickListener(this);
wb.loadUrl("http://www.google.com");
wb.setWebViewClient(t);
}
[user=439709]@override[/user]
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.dd: // search
wb.loadUrl("http://" + search.getText().toString());
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(search.getWindowToken(), 0);
break;
case R.id.back: // back
if (wb.canGoBack())
wb.goBack();
break;
case R.id.s: // forward
if (wb.canGoForward())
wb.goForward();
break;
}
}
}

hiphop12ism said:
Code:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
search = (EditText) findViewById(R.id.editText1);
wb = (WebView) findViewById(R.id.webView1);
back = (Button) findViewById(R.id.s);
forward = (Button) findViewById(R.id.back);
Bsearch = (Button) findViewById(R.id.dd);
back.setOnClickListener(this);
forward.setOnClickListener(this);
Bsearch.setOnClickListener(this);
wb.loadUrl("http://www.google.com");
wb.setWebViewClient(t);
}
I modified my code, with this.. But, its still crashing
Click to expand...
Click to collapse
It is still crashing. However, keep that code as it is right. The setContentView method needs to be called before getting the views.
In your xml there are some errors though:
You always use @+id/...
Use that just for android:id="@+id/myId".
Everywhere else do it without the plus, e.g. android:layout_below="@id/asdf".
The plus tells the compiler to create a new id. However, you do not want it to create a new id in android:layout_below but to use an already existing id.
Are all ids in the xml you load with setContentView? Is the logcat still the same? Could you please highlight the line which makes it crash?

nikwen said:
It is still crashing. However, keep that code as it is right. The setContentView method needs to be called before getting the views.
In your xml there are some errors though:
You always use @+id/...
Use that just for android:id="@+id/myId".
Everywhere else do it without the plus, e.g. android:layout_below="@id/asdf".
The plus tells the compiler to create a new id. However, you do not want it to create a new id in android:layout_below but to use an already existing id.
Are all ids in the xml you load with setContentView? Is the logcat still the same? Could you please highlight the line which makes it crash?
Click to expand...
Click to collapse
Actually, I fixed it. I made a new project. I thought of another way of making the browser.
I realised, there were lots of mistakes in the xml file.
here are my new codes. (Thank you everbody its over finally)
the UI
Code:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<EditText
android:id="@+id/editText1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="enter url" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="100"
android:orientation="horizontal" >
<Button
android:id="@+id/s"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="30"
android:text="search" />
<Button
android:id="@+id/back"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="30"
android:text="back" />
<Button
android:id="@+id/forward"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_weight="35"
android:text="forward" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<WebView
android:layout_width="match_parent"
android:layout_height="308dp"
android:id="@+id/wd" />
</LinearLayout>
</LinearLayout>
MainActivity:
Code:
package com.example.asd;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
EditText et;
Button search, back, forward;
WebView wb;
[user=439709]@override[/user]
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = (EditText) findViewById(R.id.editText1);
search = (Button) findViewById(R.id.s);
back = (Button) findViewById(R.id.back);
forward = (Button) findViewById(R.id.forward);
wb = (WebView) findViewById(R.id.wd);
search.setOnClickListener(this);
wb.getSettings().setJavaScriptEnabled(true);
wb.getSettings().setAllowFileAccess(true);
wb.getSettings().setBuiltInZoomControls(true);
}
[user=439709]@override[/user]
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.s:
wb.loadUrl(et.getText().toString());
wb.setWebViewClient(new callb());
break;
}
}
private class callb extends WebViewClient {
[user=439709]@override[/user]
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
wb.loadUrl(url);
return true;
}
}
}
But can you tell me, how can I make it more advanced. Like, when hit a editText on a website itslf.. Nothing Happens

You have to request focus on the webview:
wb.requestFocus(View.FOCUS_DOWN);

Related

Need help with a title menu

Hey everyone,
I'm working on a minesweeper-like game for my independent project in school this semester, but I'm running into a but of trouble with the title screen. What I'm trying to do is have a seperate activity launch for MainGame.java and Options.java when their respective buttons are clicked. When I click on Start, it launches the MainGame activity, but whenever I click on Options the app force closes. It's really weird because I'm doing essentially the same thing with both buttons. Here's the code for Title.java, let me know if you need to see anything else:
Code:
package com.freekyfrogy.treasure;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class Title extends Activity implements OnClickListener {
Button buttonStart, buttonScores, buttonOptions, buttonExit;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.title);
buttonStart = (Button) findViewById(R.id.buttonStart);
buttonStart.setOnClickListener(this);
buttonScores = (Button) findViewById(R.id.buttonScores);
buttonScores.setOnClickListener(this);
buttonOptions = (Button) findViewById(R.id.buttonOptions);
buttonOptions.setOnClickListener(this);
buttonExit = (Button) findViewById(R.id.buttonExit);
buttonExit.setOnClickListener(this);
}
public void onClick(View v) {
switch(v.getId()){
case R.id.buttonStart:
if(buttonStart.isPressed()){
startActivity(new Intent(getApplicationContext(),MainGame.class));
}
break;
case R.id.buttonScores:
if(buttonScores.isPressed()){
Toast.makeText(this, R.string.toastComingSoon, Toast.LENGTH_SHORT).show();
}
break;
case R.id.buttonOptions:
if(buttonOptions.isPressed()){
startActivity(new Intent(getApplicationContext(), Options.class));
}
break;
case R.id.buttonExit:
if(buttonExit.isPressed()){
finish();
}
break;
}
}
}
If i had to guess id say you didnt declare both activities in your manifest...
what does the debugger say is the problem?
I declared them both in the manifest, here's it's XML code:
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.freekyfrogy.treasure"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="4" />
<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar">
<activity android:name="Title"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="MainGame"
android:screenOrientation="portrait">
</activity>
<activity android:name="Options"
android:screenOrientation="portrait">
</activity>
</application>
</manifest>
and the Error I'm getting is this:
Code:
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): FATAL EXCEPTION: main
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.freekyfrogy.treasure/com.freekyfrogy.treasure.Options}: java.lang.NullPointerException
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1664)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1768)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at android.app.ActivityThread.access$1500(ActivityThread.java:123)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:936)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at android.os.Handler.dispatchMessage(Handler.java:99)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at android.os.Looper.loop(Looper.java:123)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at android.app.ActivityThread.main(ActivityThread.java:3812)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at java.lang.reflect.Method.invokeNative(Native Method)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at java.lang.reflect.Method.invoke(Method.java:507)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at dalvik.system.NativeStart.main(Native Method)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): Caused by: java.lang.NullPointerException
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at android.app.Activity.findViewById(Activity.java:1647)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at com.freekyfrogy.treasure.Options.<init>(Options.java:16)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at java.lang.Class.newInstanceImpl(Native Method)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at java.lang.Class.newInstance(Class.java:1409)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1656)
02-28 16:57:54.086: ERROR/AndroidRuntime(17450): ... 11 more
Can you post your Options class? It looks to me like there may be something wrong in there.
Options class:
Code:
package com.freekyfrogy.treasure;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class Options extends Activity implements OnClickListener {
int intX = 5;
int intY = 5;
EditText sizeX = (EditText) findViewById(R.id.editX);
EditText sizeY = (EditText) findViewById(R.id.editY);
Button setXY = (Button) findViewById(R.id.setXY);
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.options);
setXY.setOnClickListener(this);
}
public void onClick(View v) {
String strX = sizeX.getText().toString();
String strY = sizeY.getText().toString();
intX = Integer.parseInt(strX);
intY = Integer.parseInt(strY);
Toast.makeText(this, "this is a toast: "+ intX+ " "+ intY, Toast.LENGTH_SHORT).show();
}
}
Hi freekyfrogy,
you should declare there controls of in onCreate method of Options activity
EditText sizeX = (EditText) findViewById(R.id.editX);
EditText sizeY = (EditText) findViewById(R.id.editY);
Button setXY = (Button) findViewById(R.id.setXY);
your option activity code look like this:
package com.freekyfrogy.treasure;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class Options extends Activity implements OnClickListener {
int intX = 5;
int intY = 5;
Button setXY = (Button) findViewById(R.id.setXY);
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.options);
EditText sizeX = (EditText) findViewById(R.id.editX);
EditText sizeY = (EditText) findViewById(R.id.editY);
setXY.setOnClickListener(this);
}
public void onClick(View v) {
String strX = sizeX.getText().toString();
String strY = sizeY.getText().toString();
intX = Integer.parseInt(strX);
intY = Integer.parseInt(strY);
Toast.makeText(this, "this is a toast: "+ intX+ " "+ intY, Toast.LENGTH_SHORT).show();
}
}
Oh I see now!!! Thanks so much, now it's not force closing haha

Need Help With Admob Ads

for the life of me i cannot get the ads to display. i have it all set so it shows the space for them, but tit will not display an ad. my code is posted below
java file
Code:
package com.cmoney12051.helpcenter;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.util.Random;
import com.facebook.android.*;
import com.facebook.android.Facebook.*;
import com.google.ads.*;
import android.app.Activity;
import android.app.AlertDialog;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup.LayoutParams;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.RemoteViews;
import android.widget.TextView;
import com.google.ads.AdRequest;
import com.google.ads.AdSize;
import com.google.ads.AdView;
public class WebViewTemplate extends Activity {
private WebView myWebView;
/** Called when the activity is first created. */
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { // Enables browsing to previous pages with the hardware back button
myWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Lookup R.layout.main
AdView layout = (AdView)findViewById(R.id.ads);
// Create the adView
// Please replace MY_BANNER_UNIT_ID with your AdMob Publisher ID
String pubID ="xxxxxxxxxxxxxxx";
AdView adView2 = new AdView(this, AdSize.BANNER, pubID );
// Add the adView to it
layout.addView(adView2);
// Initiate a generic request to load it with an ad
AdRequest request= new AdRequest();
request.setTesting(true);
adView2.setVisibility(AdView.VISIBLE);
adView2.loadAd(request);
myWebView = (WebView) findViewById(R.id.webview); // Create an instance of WebView and set it to the layout component created with id webview in main.xml
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.loadUrl("http://cmoney12051.com/HelpCenter/mobile.php"); // Specify the URL to load when the application starts
//myWebView.loadUrl("file://sdcard/"); // Specify a local file to load when the application starts. Will only load file types WebView supports
myWebView.setWebViewClient(new WebViewKeep());
myWebView.getSettings().setBuiltInZoomControls(true); // Initialize zoom controls for your WebView component
myWebView.getSettings().setUseWideViewPort(true); // Initializes double-tap zoom control
}
private class WebViewKeep extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
MenuItem item = menu.add("Login");
item.setIcon(R.drawable.login);
item = menu.add("Register");
item.setIcon(R.drawable.register);
item = menu.add("Email Cmoney");
item.setIcon(R.drawable.email);
item = menu.add("Share on Facebook");
item.setIcon(R.drawable.facebook_icon);
item = menu.add("Donate");
item.setIcon(R.drawable.donate);
item = menu.add("Exit");
item.setIcon(R.drawable.exit);
return true;
}
public boolean onOptionsItemSelected(MenuItem item)
{
if (item.getTitle() == "Exit"){
android.app.AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Exit?");
builder.setIcon(R.drawable.exit);
builder.setMessage("Are you sure you want to exit?");
builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
System.exit(0);
}
});
builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
builder.show();
}
if (item.getTitle() == "Login"){
myWebView.loadUrl("http://cmoney12051.com/HelpCenter/ucp.php?mode=login");
myWebView.setWebViewClient(new WebViewKeep());
}
if (item.getTitle() == "Register"){
myWebView.loadUrl("http://cmoney12051.com/HelpCenter/ucp.php?mode=register");
myWebView.setWebViewClient(new WebViewKeep());
}
if (item.getTitle() == "Email Cmoney"){
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
String aEmailList[] = { "[email protected]" };
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, aEmailList);
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "A Message From Cmoneys Android Help Center App");
emailIntent.setType("plain/text");
startActivity(Intent.createChooser(emailIntent, "Send your email in:"));
}
if (item.getTitle() == "Share on Facebook"){
myWebView.loadUrl("http://www.facebook.com/sharer.php?u=http://cmoney12051.com/HelpCenter&t=Cmoneys%20Android%20Help%20Center&refsrc=http://m.facebook.com/sharer.php");
myWebView.setWebViewClient(new WebViewKeep());
}
if (item.getTitle() == "Donate"){
myWebView.loadUrl("https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=GDB6U44B67FXU");
myWebView.setWebViewClient(new WebViewKeep());
}
return true;
}
}
Main.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.google.ads.AdView
android:layout_width="fill_parent"
android:layout_height="60px"
android:layout_alignParentTop="true"
android:visibility="visible"
android:id="@+id/ads">
</com.google.ads.AdView>
<TableRow android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/tableRow1">
<ImageView android:id="@+id/logo"
android:src="@drawable/logo"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
</ImageView>
<TextView android:text="Cmoneys Android Help Center"
android:id="@+id/textView1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textStyle="bold"
android:textSize="30px">
</TextView>
</TableRow>
<DigitalClock android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/digitalClock1" android:text="DigitalClock"></DigitalClock>
<WebView
android:id="@+id/webview"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:focusableInTouchMode="true">
</WebView>
</LinearLayout>
Manifest
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="2"
android:versionName="1.1" package="com.cmoney12051.helpcenter">
<application android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar" android:icon="@drawable/logo">
<activity android:name=".WebViewTemplate"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.google.ads.AdView"
android:configChanges="keyboard|keyboardHidden|orientation"/>
<meta-data android:value="xxxxxxxxxxxxxx" android:name="pubID" />
<meta-data android:value="true" android:name="AD_REQUEST" />
<meta-data android:value="false" android:name="TEST_MODE" />
</application>
<uses-sdk android:minSdkVersion="4" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
</manifest>
Any Help Is Really Appreciated. Thanks anyway

[Q] Error receiving Intent from IntentService

I'm trying to make an app that displays and image which will be downloaded in background in an IntentService class. When the IntentService finishes to download it sends the intent to be catched by a BroadcastReceiver in the MainActivity but I'm getting this error:
Code:
07-17 14:27:21.003 19189-19189/com.example.matt95.myapplication E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.matt95.myapplication, PID: 19189
java.lang.RuntimeException: Error receiving broadcast Intent { act=TRANSACTION_DONE flg=0x10 (has extras) } in [email protected]
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java)
at android.os.Handler.handleCallback(Handler.java)
at android.os.Handler.dispatchMessage(Handler.java)
at android.os.Looper.loop(Looper.java)
at android.app.ActivityThread.main(ActivityThread.java)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.matt95.myapplication.MyActivity$1.onReceive(MyActivity.java:74)
************at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java)
************at android.os.Handler.handleCallback(Handler.java)
************at android.os.Handler.dispatchMessage(Handler.java)
************at android.os.Looper.loop(Looper.java)
************at android.app.ActivityThread.main(ActivityThread.java)
************at java.lang.reflect.Method.invokeNative(Native Method)
************at java.lang.reflect.Method.invoke(Method.java)
This is MainActivity class:
Code:
package com.example.matt95.myapplication;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.File;
public class MyActivity extends Activity {
ProgressDialog pd;
// Custom BroadcastReceiver for catching and showing images
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
}
@Override
protected void onStart() {
super.onStart();
Intent i = new Intent(this, ImageIntentService.class);
i.putExtra("url", "http://samsung-wallpapers.com/uploads/allimg/130527/1-13052F02118.jpg");
startService(i);
pd = ProgressDialog.show(this, "Fetching image", "Go intent service go!");
}
@Override
protected void onResume() {
super.onResume();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ImageIntentService.TRANSACTION_DONE);
registerReceiver(imageReceiver, intentFilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(imageReceiver);
}
private BroadcastReceiver imageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String location = intent.getExtras().getString("imageLocation");
if (location == null || location.length() == 0) {
String failedString = "Failed to download image";
Toast.makeText(context, failedString, Toast.LENGTH_LONG).show();
}
File imageFile = new File(location);
if (!imageFile.exists()) {
pd.dismiss();
String downloadFail = "Unable to download the image";
Toast.makeText(context, downloadFail, Toast.LENGTH_LONG).show();
return;
}
Bitmap image = BitmapFactory.decodeFile(location);
ImageView iv = (ImageView) findViewById(R.id.show_image);
iv.setImageBitmap(image);
pd.dismiss();
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.my, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
This is the IntentService class:
Code:
package com.example.matt95.myapplication;
import android.app.IntentService;
import android.content.Intent;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class ImageIntentService extends IntentService {
private File cacheDir;
private static final String CACHE_FOLDER = "/myapp/image_cache/";
public static String TRANSACTION_DONE = "com.example.matt95.myapplication.ImageIntentService.TRANSACTION_DONE";
//Constructor method
public ImageIntentService() {
super("ImageIntentService");
}
@Override
public void onCreate() {
super.onCreate();
String tmpLocation = Environment.getExternalStorageDirectory().getPath() + CACHE_FOLDER;
cacheDir = new File(tmpLocation);
if (!cacheDir.exists())
cacheDir.mkdirs();
}
@Override
protected void onHandleIntent(Intent intent) {
if (intent.hasExtra("url")) {
String remoteUrl = intent.getExtras().getString("url");
String imageLocation;
String fileName = remoteUrl.substring(remoteUrl.lastIndexOf(File.separator) + 1);
File tmpImage = new File(cacheDir + "/" + fileName);
if (tmpImage.exists()) {
imageLocation = tmpImage.getAbsolutePath();
notifyFinished(imageLocation, remoteUrl);
stopSelf();
return;
}
try {
URL url = new URL(remoteUrl);
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
if (httpCon.getResponseCode() != 200)
throw new Exception("Failed to connect");
InputStream is = httpCon.getInputStream();
FileOutputStream fos = new FileOutputStream(tmpImage);
writeStream(is, fos);
fos.flush();
fos.close();
is.close();
imageLocation = tmpImage.getAbsolutePath();
notifyFinished(imageLocation, remoteUrl);
} catch (Exception e) {
Log.e("Service", "Failed!", e);
}
}
}
private void writeStream(InputStream is, OutputStream fos) throws Exception {
byte buffer[] = new byte[80000];
int read = is.read(buffer);
while (read != -1) {
fos.write(buffer, 0, read);
read = is.read(buffer);
}
}
private void notifyFinished(String imageLocation, String remoteUrl) {
Intent i = new Intent(TRANSACTION_DONE);
i.putExtra("imageLocation", imageLocation);
i.putExtra("url", remoteUrl);
ImageIntentService.this.sendBroadcast(i);
}
}
And this is the Manifest file:
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.matt95.myapplication" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MyActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".ImageIntentService" />
</application>
</manifest>
What am I doing wrong?
Code:
Caused by: java.lang.NullPointerException
at com.example.matt95.myapplication.MyActivity$1.onReceive(MyActivity.java:74)
tells you there, you are asking an object that is of type "x" that is NULL to do something on line 74
Why not just use the picasso library or similar to download the image asynchronously in the background?
Sent from my HTC One using Tapatalk
deanwray said:
Code:
Caused by: java.lang.NullPointerException
at com.example.matt95.myapplication.MyActivity$1.onReceive(MyActivity.java:74)
tells you there, you are asking an object that is of type "x" that is NULL to do something on line 74
Click to expand...
Click to collapse
Thanks, I knew that but I'lll take a closer look at the code again :good:
Jonny said:
Why not just use the picasso library or similar to download the image asynchronously in the background?
Sent from my HTC One using Tapatalk
Click to expand...
Click to collapse
I'm a beginner in Android application so I don't have the proper knowledge right now, thanks for the suggestion though, I'll definitely try to take a look at that library :good:
matt95 said:
Thanks, I knew that but I'lll take a closer look at the code again :good:
I'm a beginner in Android application so I don't have the proper knowledge right now, thanks for the suggestion though, I'll definitely try to take a look at that library :good:
Click to expand...
Click to collapse
Better use asynctask for loading images
Sent from my Moto G using XDA Premium 4 mobile app
arpitkh96 said:
Better use asynctask for loading images
Sent from my Moto G using XDA Premium 4 mobile app
Click to expand...
Click to collapse
Yeah but I also need to download it and then load it, and it's not good to download that amount of data on the main thread
matt95 said:
Yeah but I also need to download it and then load it, and it's not good to download that amount of data on the main thread
Click to expand...
Click to collapse
AsyncTask runs in the background on a separate thread via the doInBackground method.
Sent from my HTC One using Tapatalk
Also, when there is a possibility that one of the objects included in the intent is null you can trap the error with a try/catch around the sendBroadcast() to prevent the exception from crashing the entire app.

[Q] Sendng data through Bluetooth between 2 Android devices is not working

Hi! I am trying to create an Android app which sends a message through Bluetooth from a device to another device. I am beginner in Android programming, so I have found a source code, which should do this. The problem is, that somehow I can't connect the 2 devices. I wrote this problem to some Android forums, but nobody could give me a satisfying answer. Please help me, Any answer would be appreciated which helps me to solve this problem.
Source code:
MainActivity.java:
Code:
package com.example.proba2x8;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Set;
import java.util.UUID;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
//@Override
//protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
//}
//}
//public class MainActivity extends ActionBarActivity {
BluetoothAdapter mBluetoothAdapter;
BluetoothSocket mmSocket;
BluetoothDevice mmDevice;
OutputStream mmOutputStream;
InputStream mmInputStream;
Thread workerThread;
EditText myTextbox;
TextView myLabel;
byte[] readBuffer;
int readBufferPosition;
int counter;
volatile boolean stopWorker;
String address;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent discoverableIntent = new
Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivity(discoverableIntent);
try {
Button sendButton = (Button) findViewById(R.id.send);
Button openButton = (Button) findViewById(R.id.open);
Button findButton = (Button) findViewById(R.id.bFind);
myTextbox = (EditText) findViewById(R.id.editText);
myLabel = (TextView) findViewById(R.id.textView);
openButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
openBT();
} catch (IOException ex) {
}
}
});
// send data typed by the user to be printed
sendButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
sendData();
} catch (IOException ex) {
}
}
});
findButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
findBT();
}
});
} catch (NullPointerException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
// This will find a bluetooth device
void findBT() {
try {
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
myLabel.setText("No bluetooth adapter available");
}
if (!mBluetoothAdapter.isEnabled()) {
Intent enableBluetooth = new Intent(
BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBluetooth, 0);
}
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter
.getBondedDevices();
if (pairedDevices.size() > 0) {
for (BluetoothDevice device : pairedDevices) {
// Salaxy S4 is the name of the bluetooth device
if (device.getName().equals("Xperia mini pro")) {
mmDevice = device;
address = device.getAddress();
break;
}
}
}
myLabel.setText("Bluetooth Device Found," + address);
} catch (NullPointerException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
// Tries to open a connection to the bluetooth device
void openBT() throws IOException {
try {
// Standard SerialPortService ID
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
mmSocket.connect();
myLabel.setText("1");
mmOutputStream = mmSocket.getOutputStream();
mmInputStream = mmSocket.getInputStream();
beginListenForData();
myLabel.setText("Bluetooth Opened");
} catch (NullPointerException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
// After opening a connection to bluetooth device,
// we have to listen and check if a data were sent to be printed.
void beginListenForData() {
try {
final Handler handler = new Handler();
// This is the ASCII code for a newline character
final byte delimiter = 10;
stopWorker = false;
readBufferPosition = 0;
readBuffer = new byte[1024];
workerThread = new Thread(new Runnable() {
public void run() {
while (!Thread.currentThread().isInterrupted()
&& !stopWorker) {
try {
int bytesAvailable = mmInputStream.available();
if (bytesAvailable > 0) {
byte[] packetBytes = new byte[bytesAvailable];
mmInputStream.read(packetBytes);
for (int i = 0; i < bytesAvailable; i++) {
byte b = packetBytes[i];
if (b == delimiter) {
byte[] encodedBytes = new byte[readBufferPosition];
System.arraycopy(readBuffer, 0,
encodedBytes, 0,
encodedBytes.length);
final String data = new String(
encodedBytes, "US-ASCII");
readBufferPosition = 0;
handler.post(new Runnable() {
public void run() {
myLabel.setText(data);
}
});
} else {
readBuffer[readBufferPosition++] = b;
}
}
}
} catch (IOException ex) {
stopWorker = true;
}
}
}
});
workerThread.start();
} catch (NullPointerException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* This will send data to be printed by the bluetooth
*/
void sendData() throws IOException {
try {
// the text typed by the user
String msg = myTextbox.getText().toString();
msg += "\n";
Log.w("MainActivity", msg);
mmOutputStream.write(msg.getBytes());
// tell the user data were sent
myLabel.setText("Data Sent");
} catch (NullPointerException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
activity_main.xml:
Code:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:orientation="vertical" >
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Enter Text Here" />
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" >
<requestFocus />
</EditText>
</LinearLayout>
<Button
android:id="@+id/open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/send"
android:layout_alignBottom="@+id/send"
android:layout_alignRight="@+id/linearLayout1"
android:text="Open" />
<Button
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/linearLayout1"
android:layout_marginTop="15dp"
android:text="Send" />
<TextView
android:id="@+id/recievedText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/send"
android:layout_below="@+id/send"
android:layout_marginTop="20dp"
android:text="Received Text" />
<TextView
android:id="@+id/rtArea"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/recievedText"
android:layout_alignParentBottom="true"
android:layout_below="@+id/recievedText"
android:layout_marginTop="20dp"
android:text="Received Text Will be Displayed Here..." />
<Button
android:id="@+id/bFind"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/open"
android:layout_centerHorizontal="true"
android:text="Find" />
</RelativeLayout>
LogCat errors:
Code:
12-04 03:08:27.452: E/BluetoothEventLoop.cpp(1184): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/2002/hci0/dev_90_C1_15_37_AB_E7
12-04 03:08:27.732: W/System.err(1978): java.io.IOException: Service discovery failed
12-04 03:08:27.732: W/System.err(1978): at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:377)
12-04 03:08:27.742: W/System.err(1978): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:201)
12-04 03:08:27.742: W/System.err(1978): at com.example.proba2x8.MainActivity.openBT(MainActivity.java:147)
12-04 03:08:27.742: W/System.err(1978): at com.example.proba2x8.MainActivity$1.onClick(MainActivity.java:74)
12-04 03:08:27.742: W/System.err(1978): at android.view.View.performClick(View.java:2418)
12-04 03:08:27.742: W/System.err(1978): at android.view.View.onTouchEvent(View.java:4233)
12-04 03:08:27.742: W/System.err(1978): at android.widget.TextView.onTouchEvent(TextView.java:6645)
12-04 03:08:27.742: W/System.err(1978): at android.view.View.dispatchTouchEvent(View.java:3763)
12-04 03:08:27.742: W/System.err(1978): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:968)
12-04 03:08:27.742: W/System.err(1978): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:968)
12-04 03:08:27.742: W/System.err(1978): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:968)
12-04 03:08:27.752: W/System.err(1978): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
12-04 03:08:27.752: W/System.err(1978): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
12-04 03:08:27.752: W/System.err(1978): at android.app.Activity.dispatchTouchEvent(Activity.java:2064)
12-04 03:08:27.752: W/System.err(1978): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
12-04 03:08:27.752: W/System.err(1978): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
12-04 03:08:27.752: W/System.err(1978): at android.os.Handler.dispatchMessage(Handler.java:99)
12-04 03:08:27.752: W/System.err(1978): at android.os.Looper.loop(Looper.java:123)
12-04 03:08:27.752: W/System.err(1978): at android.app.ActivityThread.main(ActivityThread.java:4370)
12-04 03:08:27.752: W/System.err(1978): at java.lang.reflect.Method.invokeNative(Native Method)
12-04 03:08:27.762: W/System.err(1978): at java.lang.reflect.Method.invoke(Method.java:521)
12-04 03:08:27.762: W/System.err(1978): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-04 03:08:27.762: W/System.err(1978): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-04 03:08:27.762: W/System.err(1978): at dalvik.system.NativeStart.main(Native Method)
12-04 03:08:32.082: E/BluetoothEventLoop.cpp(1184): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/2002/hci0/dev_90_C1_15_37_AB_E7
I am going to write, what am I doing, while I get this error:
At first, I installed this app to both of my devices. When I start this app, a message pops up, which asks me to turn on bluetooth and set discoverablity forr 300 seconds. I click ok. Then I click the find button. This should find the device, which is called "Xperia Mini Pro". When the Bluetooth Device Found message is shown, I click the open button. And here comes the error.
Please help me to solve this problem, thanks.
If you look in the log you can find the error easily
12-04 03:08:27.742: W/System.err(1978): at com.example.proba2x8.MainActivity.openBT(MainActivity.java:147)
Line 147 of MainActivity is causing you the error of java.io.IOException: Service discovery failed
I'd suggest searching for the java.io.IOException: Service discovery failed error on Google, chances are you are not the first to have this problem.

[Q] Problem with simple android app with VideoView?

Hello,
I am trying to build an Android Studio project based on a simple example from the web with VideoView. Everything seems OK, the project builds successfully but both in the emulator and on my device it gives an error: "Unfortunately [myapp] has stopped". This is getting really frustrating, I've searched the Internet for similar errors but didn't find any solution to my case. I think the code is ok but there is something with the settings because I imported the project from a web example:
itcuties[dot]com/android/play-video/
Anyway, the code is:
........SelectActivity.java........
Code:
package com.itcuties.android.videoplayer;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/**
* Select video source activity.
*
* @see ITCuties
*/
public class SelectActivity extends Activity implements OnClickListener {
private Button playFromUrlButton;
private Button playOnYouTubeButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_select);
playFromUrlButton = (Button) findViewById(R.id.buttonURL);
playOnYouTubeButton = (Button) findViewById(R.id.buttonOnYouTube);
// Set onClickListener
playFromUrlButton.setOnClickListener(this);
playOnYouTubeButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// Check which button was clicked
if (playFromUrlButton.isPressed()) {
Intent i = new Intent(SelectActivity.this, URLVideoActivity.class);
SelectActivity.this.startActivity(i);
} else if (playOnYouTubeButton.isPressed()) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse([B][I]"<Youtbe page>[/I][/B]"));
SelectActivity.this.startActivity(i);
}
}
}
........URLVideoActivity.java........
Code:
package com.itcuties.android.videoplayer;
import android.app.Activity;
import android.os.Bundle;
import android.widget.VideoView;
/**
* Play Video from URL
*
* @see ITCuties
*/
public class URLVideoActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.url_activity_video);
VideoView video = (VideoView)findViewById(R.id.videoView);
video.setVideoPath("[I][B]<Address to mp4 file>[/B][/I]");
video.start();
}
}
........AndroidManifest.xml........
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="[I][B]<schemas android link>[/B][/I]"
package="com.itcuties.android.videoplayer"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name="com.itcuties.android.videoplayer.URLVideoActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
<activity
android:name="com.itcuties.android.videoplayer.SelectActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/title_activity_select">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
The error from emulator console:
Code:
07-02 17:41:19.689 2524-2524/? D/dalvikvm﹕ Not late-enabling CheckJNI (already on)
07-02 17:41:20.270 2524-2524/? I/dalvikvm﹕ Turning on JNI app bug workarounds for target SDK version 8...
07-02 17:41:20.479 2524-2524/? E/Trace﹕ error opening trace file: No such file or directory (2)
07-02 17:41:20.939 2524-2524/com.itcuties.android.videoplayer D/AndroidRuntime﹕ Shutting down VM
07-02 17:41:20.939 2524-2524/com.itcuties.android.videoplayer W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x40a71930)
07-02 17:41:20.959 2524-2524/com.itcuties.android.videoplayer E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.itcuties.android.videoplayer/com.itcuties.android.videoplayer.SelectActivity}: java.lang.ClassNotFoundException: Didn't find class "com.itcuties.android.videoplayer.SelectActivity" on path: /data/app/com.itcuties.android.videoplayer-2.apk
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.itcuties.android.videoplayer.SelectActivity" on path: /data/app/com.itcuties.android.videoplayer-2.apk
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at android.app.Instrumentation.newActivity(Instrumentation.java:1054)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
Anybody? Thanks in advance.
Adi.
Classnotfound exception
You didn't post the SelectActivity.java for this.
Did you create this ?
Please share the content for the SelectActivity.java class.
Change the below codes :
Code:
if (playFromUrlButton.isPressed()) {
Intent i = new Intent(SelectActivity.this, URLVideoActivity.class);
SelectActivity.this.startActivity(i);
} else if (playOnYouTubeButton.isPressed()) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse([B][I]"<Youtbe page>[/I][/B]"));
SelectActivity.this.startActivity(i);
}
To this:
Code:
if (playFromUrlButton.isPressed()) {
Intent i = new Intent(SelectActivity.this, URLVideoActivity.class);
startActivity(i);
} else if (playOnYouTubeButton.isPressed()) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse([B][I]"<Youtbe page>[/I][/B]"));
startActivity(i);
}
satyampv,
I guess I have? I don't understand.
Vivek_Neel:
Thanks for reply but the error sill persists
haloperidollly said:
satyampv,
I guess I have? I don't understand.
Vivek_Neel:
Thanks for reply but the error sill persists
Click to expand...
Click to collapse
Can you try to run this app on your phone and see if it works?
It doesn't work neither on emulator nor on my tablet - same error.

Categories

Resources