Note that there are some explanatory texts on larger screens.

plurals
  1. POConvert a pice of code to class
    text
    copied!<p>I have a problem with create a separate class in jave I have this part of code</p> <pre><code>private class Read_from_db extends AsyncTask &lt;String, Long, Void&gt; { private final ProgressDialog dialog = new ProgressDialog(Read.this); // can use UI thread here protected void onPreExecute() { this.dialog.setMessage("Wait\nSome SLOW job is being done..."); this.dialog.show(); } @Override protected Void doInBackground(String... arg0) { // TODO Auto-generated method stub try { //txtMsg.append("\n"); // obtain a list of from DB String TABLE_NAME = "classicpoems__poet_header"; String COLUMN_ID = "_id"; // String _ID = "_id"; String COLUMN_NAME = "poet_name"; String COLUMN_CENTURY = "century_start"; String [] columns ={COLUMN_ID,COLUMN_NAME,COLUMN_CENTURY}; Cursor c = db.query(TABLE_NAME,columns,null, null, null, null, COLUMN_ID); SimpleCursorAdapter adapter = new SimpleCursorAdapter(Read.this, R.layout.list_item, c, new String[] {COLUMN_ID,COLUMN_NAME,COLUMN_CENTURY}, new int[] {R.id.list_item_text_id,R.id.list_item_text_main,R.id.list_item_text_sub}, 0); ListView list = (ListView) findViewById(R.id.list_poet_name); list.setAdapter(adapter); } catch (Exception e) { //Toast.makeText(Read.this, e.getMessage(), 1).show(); Log.i(TAG, e.getMessage()); } db.close(); return null; } // can use UI thread here protected void onPostExecute(final Void unused) { if (this.dialog.isShowing()) { this.dialog.dismiss(); } // cleaning-up, all done this.dialog.setMessage("Done"); } } </code></pre> <p>That must repeat each time an activity loads (but with some changes for example <code>TABLE_NAME</code> and <code>R.id.list_poet_name</code> <code>columns</code> and ..) I think repeating this code is not a professional way so I want to convert this to a separate class and in each activity I use it But I don't know how to do it..(I tried but I always get error for example I don't know how to define context for <code>SimpleCursorAdapter</code> or make Toast work here can you help me how to convert this code to a separate class</p> <p>Here Is my class code</p> <pre><code> package co.tosca.persianpoem; import android.app.Activity; import android.app.Dialog; import android.app.ProgressDialog; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.AsyncTask; import android.os.Environment; import android.util.Log; import android.view.View; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import android.widget.Toast; public class Get_data extends AsyncTask&lt;String, Long, Void&gt; { //Context context; public String TABLE_NAME; public String COLUMN_ID; public String COLUMN_NAME; public String COLUMN_CENTURY; public String[] columns; public int target; private String DATABASE_NAME; private static final String SDcardPath = Environment.getExternalStorageDirectory().getPath(); private String DbPath = SDcardPath + "/Tosca/" + DATABASE_NAME; private static final String TAG ="DatabaseHelper"; private SQLiteDatabase db; private ProgressDialog dialog; private Activity callingActivity; public int adapter_list; //public Get_data(Context context){ // this.context=context; // DATABASE_NAME="persian_poem.db"; //} public Get_data(Activity activity) { callingActivity = activity; } public Get_data() { TABLE_NAME="classicpoems__poet_header"; COLUMN_ID="_id"; COLUMN_NAME = "poet_name"; } @Override protected void onPreExecute() { this.dialog.setMessage("Wait\nSome SLOW job is being done..."); this.dialog.show(); } @Override protected Void doInBackground(String... arg0) { // TODO Auto-generated method stub try { // obtain a list of from DB // String TABLE_NAME = "classicpoems__poet_header"; // String COLUMN_ID = "_id"; // String _ID = "_id"; // String COLUMN_NAME = "poet_name"; // String COLUMN_CENTURY = "century_start"; // String [] columns ={COLUMN_ID,COLUMN_NAME,COLUMN_CENTURY}; Cursor c = db.query(TABLE_NAME,columns,null, null, null, null, COLUMN_ID); SimpleCursorAdapter adapter = new SimpleCursorAdapter(callingActivity, adapter_list, c, new String[] {COLUMN_ID,COLUMN_NAME,COLUMN_CENTURY}, new int[] {R.id.list_item_text_id,R.id.list_item_text_main,R.id.list_item_text_sub}, 0); ListView list = (ListView)callingActivity.findViewById(target); list.setAdapter(adapter); } catch (Exception e) { Toast.makeText(callingActivity, e.getMessage(), 1).show(); Log.i(TAG, e.getMessage()); } db.close(); return null; } protected void onPostExecute(final Void unused) { dialog.dismiss(); } } </code></pre> <p>and when I want to use it I use this codes</p> <pre><code>enter code here Get_data poet_name=new Get_data(); poet_name.TABLE_NAME="classicpoems__poet_header"; poet_name.COLUMN_ID = "_id"; poet_name.COLUMN_NAME = "poet_name"; poet_name.COLUMN_CENTURY = "century_start"; poet_name.columns =new String[]{"_id","poet_name","century_start"}; poet_name.adapter_list=R.layout.list_item; poet_name.target=R.id.list_poet_name; poet_name.execute(); </code></pre> <p>But I get error ..Can you help me to find my mistakes?</p> <p>I changed initial code to <code>Get_data poet_name=new Get_data(this);</code> but I am getting error yet here is part of logcat </p> <pre><code>01-06 04:25:32.262: E/AndroidRuntime(3244): FATAL EXCEPTION: main 01-06 04:25:32.262: E/AndroidRuntime(3244): java.lang.RuntimeException: Unable to start activity ComponentInfo{co.tosca.persianpoem/co.tosca.persianpoem.Read}: java.lang.NullPointerException 01-06 04:25:32.262: E/AndroidRuntime(3244): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967) 01-06 04:25:32.262: E/AndroidRuntime(3244): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992) 01-06 04:25:32.262: E/AndroidRuntime(3244): at android.app.ActivityThread.access$600(ActivityThread.java:127) 01-06 04:25:32.262: E/AndroidRuntime(3244): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158) 01-06 04:25:32.262: E/AndroidRuntime(3244): at android.os.Handler.dispatchMessage(Handler.java:99) 01-06 04:25:32.262: E/AndroidRuntime(3244): at android.os.Looper.loop(Looper.java:137) 01-06 04:25:32.262: E/AndroidRuntime(3244): at android.app.ActivityThread.main(ActivityThread.java:4441) 01-06 04:25:32.262: E/AndroidRuntime(3244): at java.lang.reflect.Method.invokeNative(Native Method) 01-06 04:25:32.262: E/AndroidRuntime(3244): at java.lang.reflect.Method.invoke(Method.java:511) 01-06 04:25:32.262: E/AndroidRuntime(3244): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 01-06 04:25:32.262: E/AndroidRuntime(3244): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 01-06 04:25:32.262: E/AndroidRuntime(3244): at dalvik.system.NativeStart.main(Native Method) 01-06 04:25:32.262: E/AndroidRuntime(3244): Caused by: java.lang.NullPointerException 01-06 04:25:32.262: E/AndroidRuntime(3244): at co.tosca.persianpoem.Get_data.onPreExecute(Get_data.java:54) 01-06 04:25:32.262: E/AndroidRuntime(3244): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561) 01-06 04:25:32.262: E/AndroidRuntime(3244): at android.os.AsyncTask.execute(AsyncTask.java:511) 01-06 04:25:32.262: E/AndroidRuntime(3244): at co.tosca.persianpoem.Read.onCreate(Read.java:65) 01-06 04:25:32.262: E/AndroidRuntime(3244): at android.app.Activity.performCreate(Activity.java:4465) 01-06 04:25:32.262: E/AndroidRuntime(3244): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 01-06 04:25:32.262: E/AndroidRuntime(3244): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931) 01-06 04:25:32.262: E/AndroidRuntime(3244): ... 11 more </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload