Reputation: 209
I am using Asynctask to retrieve the list from server in autocompletetextview but i am getting force close.My code is:
public class Aixclass extends Activity
{
protected Void[] params1;
String[] strarray;
TextView myXmlContent;
AutoCompleteTextView actv;
static final String URL="http://cympac.com/apps/xmlfile.xml";
static final String KEY_COMMAND = "command"; // parent node
static final String KEY_WORD = "word";
static final String KEY_EXPLANATION = "explanation";
String stringXmlContent;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newaix);
TextView tv1=(TextView)findViewById(R.id.textView1);
TextView tv2=(TextView)findViewById(R.id.textView2);
TextView tv4=(TextView)findViewById(R.id.textView4);
//TextView tv5=(TextView)findViewById(R.id.textView5);
String text="Cympac Software Solutions Pvt Ltd. www.cympac.com";
tv4.setText(text);
tv4.setTextColor(Color.RED);
Pattern pattern=Pattern.compile("www.cympac.com");
Linkify.addLinks(tv4,pattern,"http://");
tv4.setTextColor(Color.GREEN);
actv=(AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1);
Button b1=(Button)findViewById(R.id.button1);
Button b2=(Button)findViewById(R.id.button2);
Button b3=(Button)findViewById(R.id.button3);
Button b4=(Button)findViewById(R.id.button4);
actv = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1);
actv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new Mytask1().execute(params1);
}
});
}
private class Mytask1 extends AsyncTask<Void,Void,String[]>
{
@Override
protected String[] doInBackground(Void... params1)
{
try{
URL url=new URL("http://cympac.com/apps/aixcomm.txt");
BufferedReader buf = new BufferedReader(new InputStreamReader(url.openStream()));
String readString = new String();
ArrayList<String> val = new ArrayList();
int i=0;
while ((readString = buf.readLine()) != null) {
Log.d("line: ", readString);
val.add(readString);
Log.d("values", val.get(i).toString());
i++;
}
/*String[] strarray = new String[val.size()];
strarray = val.toArray(strarray);
for(String s : strarray)
Toast.makeText(getBaseContext(), "data:"+s, Toast.LENGTH_SHORT).show();*/
String[] strarray = new String[val.size()];/// SEE THIS
strarray = val.toArray(strarray);
}
catch(Exception e)
{
e.printStackTrace();
}
return strarray;
}
protected void onPostExecute(String[] result)
{
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(Aixclass.this,android.R.layout.select_dialog_item,strarray);
actv.setThreshold(1);
actv.setAdapter(adapter);
super.onPostExecute(result);
}
}
}
but i am getting force close.without using asynctask i run the program,it worked on emulator but failed on real device.So i used aynctask but the above code is showing force close.when i click on autocompletetextview i get "Force close" My logcat output is:
08-30 14:44:40.894: E/AndroidRuntime(1026): FATAL EXCEPTION: main
08-30 14:44:40.894: E/AndroidRuntime(1026): java.lang.NullPointerException
08-30 14:44:40.894: E/AndroidRuntime(1026): at java.util.Arrays$ArrayList.<init>(Arrays.java:49)
08-30 14:44:40.894: E/AndroidRuntime(1026): at java.util.Arrays.asList(Arrays.java:171)
08-30 14:44:40.894: E/AndroidRuntime(1026): at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:125)
08-30 14:44:40.894: E/AndroidRuntime(1026): at com.example.cd16.Aixclass$Mytask1.onPostExecute(Aixclass.java:205)
08-30 14:44:40.894: E/AndroidRuntime(1026): at com.example.cd16.Aixclass$Mytask1.onPostExecute(Aixclass.java:1)
08-30 14:44:40.894: E/AndroidRuntime(1026): at android.os.AsyncTask.finish(AsyncTask.java:417)
08-30 14:44:40.894: E/AndroidRuntime(1026): at android.os.AsyncTask.access$300(AsyncTask.java:127)
08-30 14:44:40.894: E/AndroidRuntime(1026): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
08-30 14:44:40.894: E/AndroidRuntime(1026): at android.os.Handler.dispatchMessage(Handler.java:99)
08-30 14:44:40.894: E/AndroidRuntime(1026): at android.os.Looper.loop(Looper.java:123)
08-30 14:44:40.894: E/AndroidRuntime(1026): at android.app.ActivityThread.main(ActivityThread.java:4627)
08-30 14:44:40.894: E/AndroidRuntime(1026): at java.lang.reflect.Method.invokeNative(Native Method)
08-30 14:44:40.894: E/AndroidRuntime(1026): at java.lang.reflect.Method.invoke(Method.java:521)
08-30 14:44:40.894: E/AndroidRuntime(1026): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-30 14:44:40.894: E/AndroidRuntime(1026): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-30 14:44:40.894: E/AndroidRuntime(1026): at dalvik.system.NativeStart.main(Native Method)
Upvotes: 0
Views: 529
Reputation: 9005
Problem is at this line while ((readString = buf.readLine()) != null) {
. I guess String readString=new String()
is the porblem.
Just declare String as String readString
;
This may helps you
Upvotes: 3
Reputation: 2846
Problem is in your doInBackground, you are getting some value as null you are using multiple try catch lets say one of them fails , what happens later point of time when you are using it for some operations you are getting null pointer exception. best would be to debug at what point you are getting the error and putting a null check on operations , like reading for value etc.
strarray = new String[val.size()];/// SEE THIS
strarray = val.toArray(strarray);
return strarray;
Like here you are assuming val has some value but it might be null as rest of your code is in try catch , this might be the point of error. Put a single Try Catch Block over all your code in DoInBackground.
Upvotes: 0