Проблема с первой установкой приложения для Android с Android Market - PullRequest
1 голос
/ 25 апреля 2011

Я получаю доступ к Интернету для получения информации.Приложение принудительно закрывается, когда я получаю доступ к Интернету. Если приложение удаляется и переустанавливается, оно не принудительно закрывается при доступе к Интернету. Это происходит при первой установке приложения.Пожалуйста, помогите мне разобраться в этом.

Это трассировка стека -

java.lang.RuntimeException: Unable to start activity ComponentInfo{ListOfDealSites}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.access$2300(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at java.io.DataInputStream.readLine(DataInputStream.java:309)
at ListOfDealSites.onCreate(ListOfDealSites.java:53)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
... 11 more

В нем также указывается метод источника - DataInputStream.readLine ()

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dealsites);

    InputStream in = null;
    try {
        // Connect to the server to get the list of deal sites
        in = OpenHttpConnection("Link to deal server");
        } 
    catch (IOException e1) {

        // TODO Auto-generated catch block          
        e1.printStackTrace();
    }

    try {

              DataInputStream dataIO = new DataInputStream(in);
        String strLine = null;
        int i = 0;

        while((strLine = dataIO.readLine())!= null) // Line 53------
        {
            count = i;
            NEWDEALSITES[i++] = strLine;

        }

        dataIO.close();
        in.close();
   } 
   catch (IOException e){ 

    // TODO Auto-generated catch block
    e.printStackTrace();
   }

   count_deals = count/2;
   newdeals = new String[count_deals+1];
   newsites = new String[count_deals+1];
   int j, k;
   for(j = 0, k = 0; k < count; j++)
   {
       newdeals[j] = NEWDEALSITES[k++];
       newsites[j] = NEWDEALSITES[k++];

   }

   listOfDealSites = (ListView)findViewById(R.id.ListView01);
   listOfDealSites.setAdapter(new ArrayAdapter<String>(this,R.layout.row,newdeals));



}

//Function to connect to the server.
private InputStream OpenHttpConnection(String urlString) 
throws IOException
{
    InputStream in = null;
    int response = -1;

    URL url = new URL(urlString); 
    URLConnection conn = url.openConnection();

    if (!(conn instanceof HttpURLConnection))                     
        throw new IOException("Not an HTTP connection");

    try{
        HttpURLConnection httpConn = (HttpURLConnection) conn;
        httpConn.setAllowUserInteraction(false);
        httpConn.setInstanceFollowRedirects(true);
        httpConn.setRequestMethod("GET");
        httpConn.connect(); 

        response = httpConn.getResponseCode();                 
        if (response == HttpURLConnection.HTTP_OK) {
            in = httpConn.getInputStream();                                 
        }                     
    }
    catch (Exception ex)
    {
        throw new IOException("Error connecting");            
    }
    return in;     
}

}

Ответы [ 2 ]

1 голос
/ 25 апреля 2011

По какой-то причине OpenHttpConnection возвращает ноль, что в основном означает, что вы не получаете здесь OK-ответ ...

response = httpConn.getResponseCode();                 
if (response == HttpURLConnection.HTTP_OK) {
    in = httpConn.getInputStream();                                 
}

Это означает, что dataIO будет недействительным, когда вы пытаетесьчитать данные в строке 53.

Из документов конструктора DataInputStream ...

public DataInputStream (InputStream in) С: Уровень API 1

Создает новый DataInputStreamв InputStream in.

Все чтения затем фильтруются через этот поток.Обратите внимание, что данные, считываемые этим потоком, не представлены в удобочитаемом формате и, скорее всего, были созданы DataOutputStream.

Предупреждение: передача нулевого источника создает недопустимый DataInputStream.Все операции с таким потоком завершатся неудачей.

Не уверен, что может быть причиной этого или как это исправить, но вам обязательно нужно проверить нулевой результат, возвращаемый из OpenHttpConnection, прежде чем пытатьсяиспользовать 'in' InputStream для создания вашего DataInputStream.

0 голосов
/ 04 мая 2011

Проблема возникла из-за отсутствия подключения к интернету. Я поймал исключение и выдаю сообщение для проверки соединения.

Спасибо всем за помощь.

...