PDA

View Full Version : خطا



mahioo
جمعه 07 شهریور 1393, 01:18 صبح
E/AndroidRuntime(1941): FATAL EXCEPTION: main
E/AndroidRuntime(1941): java.lang.NullPointerException

این خطاها در logcat ینی چی؟؟ چجوری رفع میشن؟؟

smemamian
جمعه 07 شهریور 1393, 01:38 صبح
سلام
خیلی ممنون بابت اطلاعات کافی که در اختیار بقیه دوستان دادید
تا به سوال تان پاسخ دهند !!!

اطلاعات کامل تری در این مورد بدهید ! در ضمن، خروجی کامل Logcat رو بذارید !!!

mahioo
جمعه 07 شهریور 1393, 01:46 صبح
08-27 08:58:15.238: E/AndroidRuntime(7956): FATAL EXCEPTION: main
08-27 08:58:15.238: E/AndroidRuntime(7956): java.lang.NullPointerException
08-27 08:58:15.238: E/AndroidRuntime(7956): at uni.prj.mafatihapp.database.Display(database.java: 106)
08-27 08:58:15.238: E/AndroidRuntime(7956): at uni.prj.mafatihapp.MainActivity$1.onClick(MainActi vity.java:31)
08-27 08:58:15.238: E/AndroidRuntime(7956): at android.view.View.performClick(View.java:4204)
08-27 08:58:15.238: E/AndroidRuntime(7956): at android.view.View$PerformClick.run(View.java:17355 )
08-27 08:58:15.238: E/AndroidRuntime(7956): at android.os.Handler.handleCallback(Handler.java:725 )
08-27 08:58:15.238: E/AndroidRuntime(7956): at android.os.Handler.dispatchMessage(Handler.java:92 )
08-27 08:58:15.238: E/AndroidRuntime(7956): at android.os.Looper.loop(Looper.java:137)
08-27 08:58:15.238: E/AndroidRuntime(7956): at android.app.ActivityThread.main(ActivityThread.jav a:5041)
08-27 08:58:15.238: E/AndroidRuntime(7956): at java.lang.reflect.Method.invokeNative(Native Method)
08-27 08:58:15.238: E/AndroidRuntime(7956): at java.lang.reflect.Method.invoke(Method.java:511)
08-27 08:58:15.238: E/AndroidRuntime(7956): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:793)
08-27 08:58:15.238: E/AndroidRuntime(7956): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:560)
08-27 08:58:15.238: E/AndroidRuntime(7956): at dalvik.system.NativeStart.main(Native Method)
08-27 09:12:54.868: E/AndroidRuntime(15047): FATAL EXCEPTION: main
08-27 09:12:54.868: E/AndroidRuntime(15047): java.lang.NullPointerException
08-27 09:12:54.868: E/AndroidRuntime(15047): at uni.prj.mafatihapp.database.Display(database.java: 106)
08-27 09:12:54.868: E/AndroidRuntime(15047): at uni.prj.mafatihapp.MainActivity$1.onClick(MainActi vity.java:31)
08-27 09:12:54.868: E/AndroidRuntime(15047): at android.view.View.performClick(View.java:4204)
08-27 09:12:54.868: E/AndroidRuntime(15047): at android.view.View$PerformClick.run(View.java:17355 )
08-27 09:12:54.868: E/AndroidRuntime(15047): at android.os.Handler.handleCallback(Handler.java:725 )
08-27 09:12:54.868: E/AndroidRuntime(15047): at android.os.Handler.dispatchMessage(Handler.java:92 )
08-27 09:12:54.868: E/AndroidRuntime(15047): at android.os.Looper.loop(Looper.java:137)
08-27 09:12:54.868: E/AndroidRuntime(15047): at android.app.ActivityThread.main(ActivityThread.jav a:5041)
08-27 09:12:54.868: E/AndroidRuntime(15047): at java.lang.reflect.Method.invokeNative(Native Method)
08-27 09:12:54.868: E/AndroidRuntime(15047): at java.lang.reflect.Method.invoke(Method.java:511)
08-27 09:12:54.868: E/AndroidRuntime(15047): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:793)
08-27 09:12:54.868: E/AndroidRuntime(15047): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:560)
08-27 09:12:54.868: E/AndroidRuntime(15047): at dalvik.system.NativeStart.main(Native Method)




این ارور هایه کامل logcat
میخام دیتابیسمو فراخونی کنم و یک مقداری رو ازش بخونم چاپ کنه رو صفحه این پیغام هادر لاگ کت میاد و برنامه همه stop میشه

saeed_g21
جمعه 07 شهریور 1393, 01:57 صبح
خطای معروف
NullPointerException

یکجایی از NULL برمیگرده
این عمل از Object ها هم میتونه باشه درست تعریف کردی ؟
دستورات دیتابیس رو حذف کن ببین باز همون پیغام میاد

درنهایت کد اکتیویتی رو هم بزار

smemamian
جمعه 07 شهریور 1393, 02:05 صبح
میخام دیتابیسمو فراخونی کنم

این طور که من متوجه شدم، پس از کلیک روی یک View (یعنی تابع onClick در خط 31 MainActivity)و فراخوانی اطلاعات از دیتابیس
داری این خطارو دریافت می کنی.

اطلاعات برگشتی از دیتابس شما مشکل داره. پس تابعی که داره مقادیر رو از دیتابیس می خونه رو بذارید.

این اتفاق بیشتر در عدم استفاده درست از cursor می باشد که بیشتر مواقع توسعه دهندگان و برنامه نویس ها یادشون میره که باید :

if(cursor.moveToFirst()){
.
.
}
رو انجام بدن.

mahioo
جمعه 07 شهریور 1393, 02:09 صبح
بدون دیتابیس جواب میده
این کدهایه مربوط به دیتابیسم توشون مشکلی هست؟؟

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;


import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;






public class database extends SQLiteOpenHelper {



public final String path="data/data/uni.prj.mafatihapp/databases/";
public final String Name="database";
public SQLiteDatabase mydb;

private final Context mycontext;


public database(Context context) {
super(context, "database", null, 1);
mycontext=context;

}



@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub

}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub

}


public void useable(){

boolean checkdb=checkdb();

if(checkdb){


}else{

this.getReadableDatabase();

try{
copydatabase();
}catch(IOException e){
}

}



}

public void open(){

mydb=SQLiteDatabase.openDatabase(path+Name, null, SQLiteDatabase.OPEN_READWRITE);

}

public void close(){
mydb.close();
}

public boolean checkdb(){

SQLiteDatabase db=null;
try{
db=SQLiteDatabase.openDatabase(path+Name, null, SQLiteDatabase.OPEN_READONLY);
}
catch(SQLException e)
{


}
//mydb.close();
return db !=null ? true:false ;

}

public void copydatabase() throws IOException{
OutputStream myOutput = new FileOutputStream(path+Name);
byte[] buffer = new byte[1024];
int length;
InputStream myInput = mycontext.getAssets().open(Name);
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myInput.close();
myOutput.flush();
myOutput.close();
}

public String Display(int row,int field,String table){

Cursor cu=mydb.rawQuery("select * from "+table, null);
cu.moveToPosition(row);
String s=cu.getString(field);
return s;
}
}

mahioo
جمعه 07 شهریور 1393, 02:14 صبح
خط 31 در main activity مربوط به تابع display هست که در دیتابیس نوشتم مشکلی داره این تابع؟

saeed_g21
جمعه 07 شهریور 1393, 02:16 صبح
خدایش خودت چیزی فهمیدی ؟

کمی سلیقه و حوصله بخرج بده

بزار داخله تگ JAVA

mahioo
جمعه 07 شهریور 1393, 02:33 صبح
[JAVA]


import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class database extends SQLiteOpenHelper {



public final String path="data/data/uni.prj.mafatihapp/databases/";
public final String Name="database";
public SQLiteDatabase mydb;

private final Context mycontext;


public database(Context context) {
super(context, "database", null, 1);
mycontext=context;

}



@Override
public void onCreate(SQLiteDatabase arg0) {


}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {


}


public void useable(){

boolean checkdb=checkdb();

if(checkdb){


}
else{

this.getReadableDatabase();

try{
copydatabase();
}
catch(IOException e){
}

}



}

public void open(){

mydb=SQLiteDatabase.openDatabase(path+Name, null, SQLiteDatabase.OPEN_READWRITE);

}

public void close(){
mydb.close();
}

public boolean checkdb(){

SQLiteDatabase db=null;
try{
db=SQLiteDatabase.openDatabase(path+Name, null, SQLiteDatabase.OPEN_READONLY);
}
catch(SQLException e)
{


}
//mydb.close();
return db !=null ? true:false ;

}

public void copydatabase() throws IOException{
OutputStream myOutput = new FileOutputStream(path+Name);
byte[] buffer = new byte[1024];
int length;
InputStream myInput = mycontext.getAssets().open(Name);
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myInput.close();
myOutput.flush();
myOutput.close();
}

public String Display(int row,int field,String table){

Cursor cu=mydb.rawQuery("select * from "+table, null);
cu.moveToPosition(row);
String s=cu.getString(field);
return s;
}
}

[JAVA/]

slr560
جمعه 07 شهریور 1393, 03:16 صبح
بازم درست ننوشتی توی تگ java
توجه کن به چیزی که مینویسی. بیا همون کد بالاس گزاشتمش توی تگ java و مرتبش کردم
دوستان راهنماییش کنن


import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;




public class database extends SQLiteOpenHelper {


public final String path = "data/data/uni.prj.mafatihapp/databases/";
public final String Name = "database";
public SQLiteDatabase mydb;
private final Context mycontext;


public database(Context context) {
super(context, "database", null, 1);
mycontext = context;
}


@Override
public void onCreate(SQLiteDatabase arg0) {


}


@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {


}


public void useable() {


boolean checkdb = checkdb();


if (checkdb) {
} else {


this.getReadableDatabase();


try {
copydatabase();
} catch (IOException e) {
}
}
}


public void open() {
mydb = SQLiteDatabase.openDatabase(path + Name, null, SQLiteDatabase.OPEN_READWRITE);
}

public void close() {
mydb.close();
}


public boolean checkdb() {


SQLiteDatabase db = null;
try {
db = SQLiteDatabase.openDatabase(path + Name, null, SQLiteDatabase.OPEN_READONLY);
} catch (SQLException e) {

}
//mydb.close();
return db != null ? true : false;


}

public void copydatabase() throws IOException {
OutputStream myOutput = new FileOutputStream(path + Name);
byte[] buffer = new byte[1024];
int length;
InputStream myInput = mycontext.getAssets().open(Name);
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myInput.close();
myOutput.flush();
myOutput.close();
}

public String Display(int row, int field, String table) {

Cursor cu = mydb.rawQuery("select * from " + table, null);
cu.moveToPosition(row);
String s = cu.getString(field);
return s;
}
}

smemamian
جمعه 07 شهریور 1393, 10:54 صبح
چرا از where استفاده نمی کنی ؟

تست کن :

public String Display(int row, int field, String table) {



Cursor cu = mydb.rawQuery("select * from " + table, null);

cu.moveToFirst();

cu.moveToPosition(row);

String s = cu.getString(field);

return s;

}