2015-12-06 2 views
1

Я пытаюсь создать мини-yamba.newcircle.com из моего учебного проекта Android. Я сохраняю текстовые сообщения, когда Интернет недоступен, и при подключении к широковещательному приемнику, если Интернет работает. Это приложение автоматически запускает службу, которая выполняет цикл, чтобы выталкивать все сохраненные текстовые строки в ActiveAndroid из таблицы через HTTP-сообщения в веб-API.Невозможно создать экземпляр сервиса java.lang.NullPointerException

Когда я отключу Wi-Fi, сохраните некоторые сообщения с помощью ActiveAndroid и снова включите Wi-Fi; если мое приложение подключается, оно просто падает с NullPointereException.

Любые предложения?

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="pt.flag.miniyamba" > 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 


    <application 
     android:name="MiniYamba" 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme" > 
     <meta-data 
      android:name="AA_DB_NAME" 
      android:value="yamba.db" /> 
     <meta-data 
      android:name="AA_DB_VERSION" 
      android:value="5" /> 

     <activity android:name=".Main" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".OnlineStatus" > 
     </activity> 
     <activity android:name=".OfflineStatus" > 
     </activity> 
     <activity android:name=".SingleStatus" > 
     </activity> 
     <activity android:name=".NewStatus" > 
     </activity> 

     <receiver android:name=".NetworkBroadCastReceiver"> 
      <intent-filter> 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE"></action> 
      </intent-filter> 
     </receiver> 
     <service android:name=".PushOfflineSavedService"/> 

    </application> 

</manifest> 

broacast

public class NetworkBroadCastReceiver extends BroadcastReceiver { 

    private Context mContext; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     ConnectivityManager manager =(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = manager.getActiveNetworkInfo(); 

     if(netInfo != null && netInfo.isConnectedOrConnecting()){ 
      Toast.makeText(context, "net is up, pushing our previous offline saved posts ", Toast.LENGTH_SHORT).show(); 

      //inicializar o servico de push de posts, guardados anteriormente 

      Intent novointent = new Intent(context, PushOfflineSavedService.class); 
      context.startService(novointent); 
     } 
     //mudou de conectividade, mas nao tem internet 
     else{ 
      Toast.makeText(context, "Connectivity is changed. Internet seens not working.", Toast.LENGTH_SHORT).show(); 
     } 

    } 



} 

intentservice

public class PushOfflineSavedService extends IntentService { 

    private String LOG_TAG; 

    public PushOfflineSavedService() { 

     super("PushOfflineSavedService"); 
     ActiveAndroid.initialize(this); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 

     //enviar os status guardados, por enviar 

     List<OfflinePostToSend> lista = new Select().from(OfflinePostToSend.class).execute(); 

     //loop para enviar os status 
     if (lista.size() > 0) { 

      for (int i = 0; i < lista.size(); i++) { 

       HttpURLConnection urlConnection = null; 
       BufferedReader reader = null; 

       try { 
        String path = "http://yamba.newcircle.com/api/statuses/update.json"; 
        String status = lista.get(i).getText(); 

        URL url = new URL(path); 
        String userPass = "student:password"; 
        String token = "Basic " + Base64.encodeToString(userPass.getBytes(), Base64.NO_WRAP); 
        urlConnection = (HttpURLConnection) url.openConnection(); 
        urlConnection.setRequestMethod("POST"); 
        // Adicionar o token como header do pedido 
        urlConnection.addRequestProperty("Authorization", token); 
        urlConnection.setDoOutput(true); 

        String postParameters = "status="+status; 
        urlConnection.setFixedLengthStreamingMode(postParameters.getBytes().length); 
        urlConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); 

        // Adicionar o status ao método post 
        PrintWriter out = new PrintWriter(urlConnection.getOutputStream()); 
        out.print(postParameters); 
        out.close(); 

        reader = new BufferedReader(new InputStreamReader(new BufferedInputStream(urlConnection.getInputStream()))); 
        StringBuilder buffer = new StringBuilder(); 

        String line; 
        while ((line = reader.readLine()) != null) { 
         buffer.append(line); 
         buffer.append("\n"); 
        } 
        //se buffer nao for full, temos 1 respota do API 
        if (buffer.length() != 0) { 
         // Stream was NOT empty. 
         //apagar este elemento da lista e da db 

         lista.get(i).delete(); 

        } 

        //return buffer.toString(); 

       } catch (IOException e) { 
        Log.e(LOG_TAG, "Error ", e); 
       } finally { 
        if (urlConnection != null) { 
         urlConnection.disconnect(); 
        } 
        if (reader != null) { 
         try { 
          reader.close(); 
         } catch (final IOException e) { 
          Log.e(LOG_TAG, "Error closing stream", e); 
         } 
        } 
       } 
      } 
     } 

    } 
} 
+0

где logcat ?? –

+0

Опубликуйте свой логарифм. – Pankaj

+0

извините, отредактировано для добавления журнала –

ответ

0

ActiveAndroid guide показывает вызов initialize() в качестве Application подкласса, например:

public class MyApplication extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     ActiveAndroid.initialize(this); 
    } 
} 

Попробуйте расширить приложение и поместите свой вызов initialize() там, а не в службу.

+0

Публичный класс MiniYamba расширяет применение { @Override public void onCreate() { super.onCreate(); ActiveAndroid.initialize (this); } } –

+0

and manifest android: name = "MiniYamba" –

+0

Были ли эти исправления устранены? –

Смежные вопросы