user1387035
user1387035

Reputation: 209

How to use Asynctask for receiving the input from server in autocompletetextview?

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

Answers (2)

Abhi
Abhi

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

Sunny Kumar Aditya
Sunny Kumar Aditya

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

Related Questions