2017-12-29 1 views
0

이것은 내 로그인 앱입니다. 내 앱이 계속 괴롭힘.내 안드로이드 에뮬레이터가 계속 중단됩니다.

프로그램 코드 :

package ru.foodrobot.wma; 

import android.os.Looper; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 

import com.loopj.android.http.AsyncHttpClient; 
import com.loopj.android.http.AsyncHttpResponseHandler; 
import com.loopj.android.http.BaseJsonHttpResponseHandler; 
import com.loopj.android.http.JsonHttpResponseHandler; 
import com.loopj.android.http.RequestHandle; 
import com.loopj.android.http.RequestParams; 
import com.loopj.android.http.TextHttpResponseHandler; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import android.app.Activity; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import cz.msebera.android.httpclient.Header; 
import io.realm.Realm; 
import io.realm.RealmConfiguration; 

import io.realm.Realm; 
import io.realm.RealmList; 
import io.realm.RealmResults; 


public class MainActivity extends AppCompatActivity { 

    private Realm mRealm; 
    private Realm mRealmInstance; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    protected void onStart(){ 

     mRealm.init(this); 
     RealmConfiguration config = new RealmConfiguration.Builder().build(); 
     mRealm.setDefaultConfiguration(config); 
     mRealmInstance = mRealm.getInstance(config); 

     //the code was here - 29.12.17 
     //********** 
     try { 
      RealmResults User = mRealmInstance.where(Config.class).equalTo("name", "token").findAllAsync(); 
      if (User.size() > 0) { 

       String nameOfUser = User.get(0).toString(); 

      } else if (User.size() == 0) { 
         /* Log.e("query","query size is "+User.size()); */ 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     AsyncHttpClient client = new AsyncHttpClient(); 

     RequestParams rp = new RequestParams(); 
     rp.add("email", "[email protected]"); 
     rp.add("password", "123456"); 

     RequestHandle post = client.post("https://wms-amerzyanov.foodrobot.ru/api/v1/auth", rp, new JsonHttpResponseHandler() { 

      @Override 
      public void onSuccess(int statusCode, Header[] headers, JSONObject response) { 
       // Root JSON in response is an dictionary i.e { "data : [ ... ] } 
       // Handle resulting parsed JSON response here 
       try { 
        String tokenString = response.getString("token"); 

        mRealm.beginTransaction(); 
        Config myConfig = mRealm.createObject(Config.class); 
        myConfig.name = "token"; 
        myConfig.tokenValue = tokenString; 
        mRealm.commitTransaction(); 
       } catch (NullPointerException e) { 
        e.printStackTrace(); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 


      } 

      @Override 
      public void onFailure(int statusCode, Header[] headers, String res, Throwable t) { 
       // called when response HTTP status is "4XX" (eg. 401, 403, 404) 
      } 
     }); 
    } 
} 

내 로그 캣은 다음과 같습니다

12-29 13 : 54 : 30.042 19758-19758/ru.foodrobot.wma E/AndroidRuntime : 치명적인 예외 : 주요 프로세스 : ru.foodrobot.wma, PID : 19758 java.lang.RuntimeException : 활동을 시작할 수 없습니다. ComponentInfo {ru.foodrobot.wma/ru.foodrobot.wma.MainActivity} : io.realm.exceptions.RealmMigrationNeededException : 마이그레이션이 필요합니다. 다음과 같은 오류로 인해 : - Class 'Conf ig '가 추가되었습니다. 로이드에서 android.app.ActivityThread.-wrap12에서 android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2726) 에서 android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2665) (ActivityThread.java) 에서 .app.ActivityThread $ H.handleMessage (ActivityThread.java:1477) android.os.Handler.dispatchMessage (Handler.java:102) at android.os.Looper.loop (Looper.java:154) at android .app.ActivityThread.main (ActivityThread.java:6119) at java.lang.reflect.Method.invoke (기본 메소드) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (Z yogoteInit.java:886) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776) 발생 원인 : io.realm.exceptions.RealmMigrationNeededException : 다음 오류 때문에 마이그레이션이 필요합니다. - 클래스 'Config'가 추가되었습니다. io.realm.internal.OsSharedRealm에서 io.realm.internal.OsSharedRealm.nativeGetSharedRealm (기본 방법) 에서 . io.realm.internal.OsSharedRealm.getInstance에서 (OsSharedRealm.java:184) (OsSharedRealm.java:254) io.realm.BaseRealm에서 . io.realm.BaseRealm에서 (BaseRealm.java:124) . io.realm.Realm에서 (BaseRealm.java:93) . (Realm.java:153)에서 io.realm io.realm.RealmCache.createRealmOrGetFromCache (RealmCache.java:282)에서 io.realm.RealmCache.doCreateRealmOrGetFromCache (RealmCache.java:342) 에서 .Realm.createInstance (Realm.java:424) at io.realm.Realm.getInstance (Realm.java:353) at ru.foodrobot.wma.MainActivity.onStart (MainActivity.java:60) android.app.Instrumentation.callActivityOnStart (Instrumentation.java:1248) android.app.Activity.performStart (Activity.java:6696) android.app.ActivityThread.performLaunchActivity에서 (ActivityThread.java:2628

답변

0

에서 당신은 당신의 응용 프로그램을 삭제하고 다시 설치하려고 할 수 있습니다. 또한,이 코드 조각으로 RealmConfiguration을 대체 할 수

RealmConfiguration config = new RealmConfiguration 
          .Builder() 
          .deleteRealmIfMigrationNeeded() 
          .build(); 
+0

합니다. 앱이 디버깅되지 않았습니다. – Anatoly

+0

[이 스레드] (https://github.com/realm/realm-java/issues/4844)가 문제를 찾는 데 도움이 될 수 있습니다. – Yuliwee

1

응용 프로그램이 충돌한다 당신이 당신의 데이터의 구조를 변경하기 때문이다.

저장 한 데이터를 손실하지 않으려면 이러한 유형의 상황을 처리하도록 마이그레이션을 구성해야합니다.당신이 아직 개발하고 체계가 변경하는 경우에는 자주 사용할 수 있습니다 :

RealmConfiguration config = new RealmConfiguration.Builder() 
     .deleteRealmIfMigrationNeeded() 
     .build() 

를 자세한 내용은 마이그레이션 구성하는 방법에 : 도움이되지 않았지만 내가 deleteRealmIfMigrationNeeded()를 사용 https://realm.io/docs/java/latest/#migrations

관련 문제