New! 영역에서 데이터를 검색 할 때 문제가 발생했습니다. 나는 retrofit을 사용하고, Realm (Successful for Sqlite)을 사용하여 데이터를 저장하고 싶지만 데이터베이스에서 데이터를 검색하는 동안 나는 그것을 게시 한 오류가있다.렐름에서 데이터를 가져 오는 중 오류가 발생했습니다.
package np.com.rabindraacharya.retrofitintern.ui;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import java.util.List;
import np.com.rabindraacharya.retrofitintern.Controller.RestManager;
import np.com.rabindraacharya.retrofitintern.R;
import np.com.rabindraacharya.retrofitintern.model.Flower;
import np.com.rabindraacharya.retrofitintern.model.adapter.FlowerAdapter;
import np.com.rabindraacharya.retrofitintern.model.helper.Constants;
import np.com.rabindraacharya.retrofitintern.model.helper.FlowerDatabase;
import np.com.rabindraacharya.retrofitintern.model.helper.Utils;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class MainActivity
extends AppCompatActivity
implements FlowerAdapter.FlowersClickListener {
private RecyclerView recyclerView;
private RestManager mManager;
FlowerAdapter mFlowerAdapter;
FlowerDatabase mDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG).setAction("Action", null).show();
}
});
configViews();
mManager = new RestManager();
mDatabase = new FlowerDatabase();
if(Utils.isNetworkAvailable(getApplicationContext())) {
getFeed();
} else {
getFeedFromDatabase();
}
}
private void getFeedFromDatabase() {
Log.e("RetData", "RetData");
List<Flower> flowerList = mDatabase.getFlower();
for(int i = 0; i < flowerList.size(); i++) {
Flower flower = flowerList.get(i);
mFlowerAdapter.addFlower(flower);
}
}
private void configViews() {
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool());
LinearLayoutManager verticalLayoutmanager = new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(verticalLayoutmanager);
mFlowerAdapter = new FlowerAdapter(this);
recyclerView.setAdapter(mFlowerAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if(id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(int position) {
Flower selectedFlower = mFlowerAdapter.getSelectedFlower(position);
Intent intent = new Intent(MainActivity.this, DetailActivity.class);
intent.putExtra(Constants.REFERENCE.FLOWER, selectedFlower);
startActivity(intent);
}
public void getFeed() {
Call<List<Flower>> listCall = mManager.getFlowerService().getAllFlowers();
listCall.enqueue(new Callback<List<Flower>>() {
@Override
public void onResponse(Call<List<Flower>> call, Response<List<Flower>> response) {
if(response.isSuccessful()) {
List<Flower> flowerList = response.body();
for(int i = 0; i < flowerList.size(); i++) {
Flower flower = flowerList.get(i);
SaveIntoDatabase task = new SaveIntoDatabase();
task.execute(flower);
mFlowerAdapter.addFlower(flower);
}
} else {
int st = response.code();
switch(st) {
}
}
}
@Override
public void onFailure(Call<List<Flower>> call, Throwable t) {
}
});
}
public class SaveIntoDatabase
extends AsyncTask<Flower, Flower, Boolean> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Boolean doInBackground(Flower... params) {
Flower flower = params[0];
try {
//InputStream stream = new URL("http://services.hanselandpetal.com/photos/" + flower.getPhoto()).openStream();
// Bitmap bitmap = BitmapFactory.decodeStream(stream);
//flower.setPicture(bitmap);
mDatabase.addFlower(flower);
Log.e("ErrorAft", "ErrorAft");
} catch(Exception e) {
}
return null;
}
}
}
이
을 FlowerDatabasepackage np.com.rabindraacharya.retrofitintern.model.helper;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
import io.realm.Realm;
import io.realm.RealmResults;
import np.com.rabindraacharya.retrofitintern.model.Flower;
import np.com.rabindraacharya.retrofitintern.model.adapter.FlowerAdapter;
/**
* Created by Rabindra on 8/12/2016.
*/
public class FlowerDatabase
extends AppCompatActivity {
private Realm myRealm;
private int productID;
private static FlowerDatabase flowerDatabase;
private static List<Flower> arrayListFlower = new ArrayList<>();
private FlowerAdapter flowerAdapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myRealm = Realm.getDefaultInstance();
flowerDatabase = this;
}
public void addFlower(Flower model) {
Log.e("RealmData", "RealmData");
myRealm.beginTransaction();
Flower flower = myRealm.createObject(Flower.class);
flower.setProductId(model.getProductId());
flower.setCategory(model.getCategory());
flower.setName(model.getName());
flower.setPrice(model.getPrice());
flower.setInstruction(model.getInstruction());
arrayListFlower.add(flower);
myRealm.commitTransaction();
flowerAdapter.notifyDataSetChanged();
}
public List<Flower> getFlower() {
Flower model = new Flower();
productID = model.getProductId();
RealmResults<Flower> results = myRealm.where(Flower.class).findAll();
myRealm.beginTransaction();
for(int i = 0; i < results.size(); i++) {
arrayListFlower.add(results.get(i));
}
if(results.size() > 0) {
productID = myRealm.where(Flower.class).max("id").intValue() + 1;
}
myRealm.commitTransaction();
flowerAdapter.notifyDataSetChanged();
return arrayListFlower;
}
}
오류 로그 캣 :
N E/AndroidRuntime : 치명적인 예외 : 주요 프로세스 : np.com.rabindraacharya.retrofitintern, PID : 17091
java.lang.RuntimeException : 활동을 시작할 수 없습니다. 에서 android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2317)에서 java.lang.NullPointerException이 : 1,363,210 ComponentInfo {/ np.com.rabindraacharya.retrofitintern np.com.rabindraacharya.retrofitintern.ui.MainActivity} android.app.ActivityThread.access $ 900 android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2375) android.app.ActivityThread $ H.handleMessage에서 (ActivityThread.java:164) (ActivityThread.java:1268) android.os.Handler.dispatchMessage (Handler.java:102) android.os.Looper.loop (Looper.java:157) 012 java.lang.reflect.Method.invoke (Method.java:515)에서 java.lang.reflect.Method.invokeNative (기본 방법) 에서 android.app.ActivityThread.main (ActivityThread.java:5377) 에서 3,516, com.android.internal.os.ZygoteInit.main에서 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1265) (ZygoteInit.java:1081) dalvik.system.NativeStart에서 에서. main (네이티브 메소드) 발생 원인 : java.lang.NullPointerException at np.com.rabindraacharya.retrofitintern.model.helper.FlowerDatabase.getFlower (FlowerDataba se.java:70) np.com.rabindraacharya.retrofitintern.ui.MainActivity.onCreate에서 np.com.rabindraacharya.retrofitintern.ui.MainActivity.getFeedFromDatabase (MainActivity.java:69) (MainActivity.java에서 : 63) android.app.ActivityThread.performLaunchActivity에서 android.app.Activity.performCreate android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1105에서 (Activity.java:5428) ) (ActivityThread.java에서 : 2281) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2375)android.app.ActivityThread.access $ (900) (ActivityThread.java:164) android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1268) android.os.Handler.dispatchMessage에서 (Handler.java에서에서: 102) android.os.Looper.loop (Looper.java:157) android.app.ActivityThread.main (ActivityThread.java:5377) at java.lang.reflection.Method.invokeNative (네이티브 메소드) at java.lang.reflect.Method.invoke (Method.java:515) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1265) 이 줄은 여기
myRealm.where(Flower.class).max("id").intValue() + 1;
더 플라워 경우 NullPointerException이 발생합니다
1. 어떤 버전의 Realm을 사용하고 있습니까? 2.) 그 클래스가 완전히 틀리기 때문에'FlowerDatabase'에서 무엇을하려고 했습니까? – EpicPandaForce
마지막으로 문제를 해결합니다. 고마워요. 당신의 의견 –