CSV-файл не загружается в Android-приложение из любого файлового менеджера в телефоне Motorola, но прекрасно работает в Java

android csv android-sqlite

178 просмотра

1 ответ

3 Репутация автора

Это код, который я использую для импорта файла CSV, расположенного в моем внешнем хранилище, в мою базу данных, и из этого будет создан список с использованием этой базы данных.

Загрузить-> ES File Explorer (в моем случае) -> abc.csv (из внешнего хранилища) -> Обычный способ Android. Но экран остается пустым и не выводится logcat, ошибки не отображаются.

Код для деятельности_основная

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFC7C7C7"
android:orientation="vertical"
android:weightSum="9">


<LinearLayout
    android:id="@+id/lvcontainer"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_alignParentTop="true"
    android:layout_weight="0.5"
    android:background="#FFC7C7C7"
    android:orientation="horizontal"
    android:padding="1dp"
    android:weightSum="3">

    <TextView
        android:id="@+id/txtjournalname"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="left"
        android:text="NAME"
        android:textColor="#000000"
        android:textSize="13sp" />

    <TextView
        android:id="@+id/txtjournalissn"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="left"
        android:padding="3dp"
        android:text="ISSN"
        android:textColor="#000000"
        android:textSize="13sp" />


    <TextView
        android:id="@+id/txtjournalif"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="left"
        android:padding="3dp"
        android:text="IMPACTFACTOR"
        android:textColor="#000000"
        android:textSize="13sp" />
</LinearLayout>




    <ListView
        android:id="@android:id/list"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_below="@+id/lvcontainer"
        android:layout_weight="7"/>

<TextView
    android:id="@+id/txtresulttext"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_marginLeft="5dp"
    android:layout_marginTop="2dp"
    android:layout_weight="0.5"
    android:gravity="left"
    android:text=""
    android:textColor="#FFF55F54"
    android:textSize="20sp"
    android:textStyle="italic|bold"/>

<LinearLayout
    android:id="@+id/lvbottom"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_alignParentBottom="true"
    android:layout_weight="1"
    android:orientation="horizontal"
    android:weightSum="1">

    <Button
        android:id="@+id/btnupload"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="#1083f5"
        android:gravity="center"
        android:text="UPLOAD"
        android:textColor="#ffffff"
        android:textSize="15sp"
        android:textStyle="bold" />
</LinearLayout>

Код для v.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">


<LinearLayout
    android:id="@+id/lvh"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#ffe6e6e6"
    android:orientation="horizontal"
    android:scrollbars="horizontal"
    android:weightSum="3">

    <TextView
        android:id="@+id/txtproductcompany"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="left"
        android:text="NAME"
        android:textColor="#000000"
        android:textSize="13sp" />

    <TextView
        android:id="@+id/txtproductname"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="left"
        android:padding="3dp"
        android:text="ISSN"
        android:textColor="#000000"
        android:textSize="13sp" />

    <TextView
        android:id="@+id/txtproductprice"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="left"
        android:padding="3dp"
        android:text="IMPACTFACTOR"
        android:textColor="#000000"
        android:textSize="13sp" />

</LinearLayout>

Код для DBController.java

public class DBController extends SQLiteOpenHelper {
private static final String LOGCAT = null;

public DBController(Context applicationcontext) {

    super(applicationcontext, "journal.db", null, 1);  // creating DATABASE

    Log.d(LOGCAT, "Created");

}



@Override
public void onCreate(SQLiteDatabase database) {

    String query;

    query = "CREATE TABLE IF NOT EXISTS tbljournal ( Name TEXT, Issn TEXT PRIMARY KEY, ImpactFactor REAL)";

    database.execSQL(query);

}


@Override
public void onUpgrade(SQLiteDatabase database, int version_old, int current_version) {
    String query;
    query = "DROP TABLE IF EXISTS tbljournal";
    database.execSQL(query);
    onCreate(database);
}



public ArrayList<HashMap<String, String>> getAllProducts() {

    ArrayList<HashMap<String, String>> journalList;
    journalList = new ArrayList<HashMap<String, String>>();
    String selectQuery = "SELECT  * FROM tbljournal";
    SQLiteDatabase database = this.getWritableDatabase();
    Cursor cursor = database.rawQuery(selectQuery, null);

    if (cursor.moveToFirst()) {

        do {
            //Id, Company,Name,Price
            HashMap<String, String> map = new HashMap<String, String>();
            map.put("a", cursor.getString(0));
            map.put("b", cursor.getString(1));
            map.put("c", cursor.getString(2));
            journalList.add(map);
            Log.e("dataofList",cursor.getString(0)+","+cursor.getString(1)+","+cursor.getString(2));
            Log.d("TAG", DatabaseUtils.dumpCursorToString(cursor));
        } while (cursor.moveToNext());
    }

    return journalList;

}

}

Код для MainActivity.java

public class MainActivity extends ListActivity {


TextView lbl;
DBController controller;
Button btnimport;
//ListView lv;
//final Context context = this;
//ListAdapter adapter;

ArrayList<HashMap<String, String>> myList;
public static final int requestcode = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    controller = new DBController(this);
    lbl = (TextView) findViewById(R.id.txtresulttext);
    btnimport = (Button) findViewById(R.id.btnupload);
    //lv = getListView();
    btnimport.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent fileintent = new Intent(Intent.ACTION_GET_CONTENT);
            fileintent.setType("gagt/sdf");
            try {
                startActivityForResult(fileintent, requestcode);
            } catch (ActivityNotFoundException e) {
                lbl.setText("No activity can handle picking a file. Showing alternatives.");
            }

            Log.d("Click","button is clicked");
        }
    });

    myList = controller.getAllProducts();
    if (myList.size() != 0) {
                 ListAdapter adapter = new SimpleAdapter(MainActivity.this, myList,
                R.layout.v, new String[]{"Name", "Issn", "ImpactFactor"}, new int[]{
                R.id.txtproductcompany, R.id.txtproductname, R.id.txtproductprice});
        setListAdapter(adapter);
        lbl.setText("");
    }
}

/** you were wrong here
 * R.id.txtjournalname, R.id.txtjournalissn, R.id.txtjournalif});
 in v.xml its
 R.id.txtproductcompany, R.id.txtproductname, R.id.txtproductprice});
 */

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (data == null)

        return;
    switch (requestCode) {

        case requestcode:

            String filepath = data.getData().getPath();
            controller = new DBController(getApplicationContext());
            SQLiteDatabase db = controller.getWritableDatabase();
            String tableName = "tbljournal";
            db.execSQL("delete from " + tableName);

            try {
                isExternalStorageReadable();
                if (resultCode == RESULT_OK) {

                    try {
                        FileReader file = new FileReader(filepath);
                        BufferedReader buffer = new BufferedReader(file);
                        ContentValues contentValues = new ContentValues();
                        String line;
                        db.beginTransaction();

                        while ((line = buffer.readLine()) != null) {


                            String[] str = line.split(",", 3);  // defining 3 columns with null or blank field //values acceptance

                            //Id, Company,Name,Price

                            String name = str[0];
                            String issn = str[1];
                            String imp = str[2];
                            Log.e("data", name);
                            contentValues.put("Name", name);
                            contentValues.put("ISSN", issn);
                            contentValues.put("ImpactFactor", imp);
                            db.insert(tableName, null, contentValues);

                            lbl.setText("Successfully Updated Database.");

                        }
                        db.setTransactionSuccessful();

                        db.endTransaction();

                    }catch (SQLException e)
                    {
                        Log.e("Error", e.getMessage());
                    }
                    catch (IOException e) {

                        if (db.inTransaction())
                            db.endTransaction();
                        Dialog d = new Dialog(this);
                        d.setTitle(e.getMessage() + "first");
                        d.show();
                        // db.endTransaction();
                    }
                } else {

                    if (db.inTransaction())

                        db.endTransaction();

                    Dialog d = new Dialog(this);

                    d.setTitle("Only CSV files allowed");

                    d.show();
                }
            } catch (Exception ex) {

                if (db.inTransaction())

                    db.endTransaction();


                Dialog d = new Dialog(this);

                d.setTitle(ex.getMessage() + "second");

                d.show();

                // db.endTransaction();

            }

    }

    myList = controller.getAllProducts();

    if (myList.size() != 0) {

        ListAdapter adapter = new SimpleAdapter(MainActivity.this, myList,

                R.layout.v, new String[]{"a", "b", "c"}, new int[]{
                R.id.txtproductcompany, R.id.txtproductname, R.id.txtproductprice});


        setListAdapter(adapter);

        lbl.setText("Data Imported");

    }    }

public boolean isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state) ||
            Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        return true;
    }
    return false;
}
}

Вывод должен выглядеть как этот AppImage

Автор: ArnavvG Источник Размещён: 18.07.2016 09:17

Ответы (1)


0 плюса

24 Репутация автора

Я знаю, что немного поздно, но Motorola - мой тестер, и он отлично работает со мной, надеюсь, это поможет не только вам, но и другим. ура ^^

Прежде всего, вы должны сосредоточиться на файле, и я использую оповещение Dialouge в качестве триггера

  AlertDialog.Builder alertdialog = new AlertDialog.Builder(MainActivity.this);
            alertdialog.setTitle("Confirm Import...");
            alertdialog.setMessage("Are you sure you want to Import Data?");
            alertdialog.setPositiveButton("Yes", new DialogInterface.OnClickListener(){


                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Intent fileintent = new Intent(Intent.ACTION_GET_CONTENT);
                    fileintent.setType("gagt/sdf");
                    try {
                        startActivityForResult(fileintent, requestcode);
                    } catch (ActivityNotFoundException e) {
                    }
                }
            });
            alertdialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(getApplicationContext(),"Import Canceled" ,Toast.LENGTH_SHORT ).show();
                }
            });
            alertdialog.show();

затем на результат деятельности просто поместите его код и отредактируйте переменные, которые я использовал, чтобы соответствовать вашему ^^

if (data == null)
            return;
        switch (requestCode) {
            case requestcode:
                String filepath = data.getData().getPath();
                controller = new DBController(getApplicationContext());
                SQLiteDatabase db = controller.getWritableDatabase();
                String tableName = "Countsheet";
                db.execSQL("delete from " + tableName);
                try {
                    if (resultCode == RESULT_OK) {
                        try {
                            FileReader file = new FileReader(filepath);
                            BufferedReader buffer = new BufferedReader(file);
                            ContentValues contentValues = new ContentValues();
                            String line = "";
                            db.beginTransaction();

                            while ((line = buffer.readLine()) != null) {

                                String[] str = line.split(",", 5);  // defining 5 columns with null or blank field //values acceptance
                                //Id, category,code,Description,Unit,Quantity
                                String category = str[0];
                                String code = str[1];
                                String description = str[2];
                                String units = str[3];
                                String quants = str[4];
                                contentValues.put("Category", category);
                                contentValues.put("Code", code);
                                contentValues.put("Description", description);
                                contentValues.put("Unit", units);
                                contentValues.put("Quantity", quants);
                                db.insert(tableName, null, contentValues);
                            }
                            db.setTransactionSuccessful();
                            db.endTransaction();
                        } catch (IOException e) {
                            if (db.inTransaction())
                                db.endTransaction();
                            Dialog d = new Dialog(this);
                            d.setTitle(e.getMessage() + "first");
                            d.show();
                            d.dismiss();
                            // db.endTransaction();
                        }
                    } else {
                        if (db.inTransaction())
                            db.endTransaction();
                        Dialog d = new Dialog(this);
                        d.setTitle("Only CSV files allowed");
                        d.show();
                        d.dismiss();
                    }
                } catch (Exception ex) {
                    if (db.inTransaction())
                        db.endTransaction();
                    Dialog d = new Dialog(this);
                    d.setTitle(ex.getMessage() + "second");
                    d.show();
                    d.dismiss();
                    // db.endTransaction();
                }
        }
//        data.clone();
        Intent refresh = new Intent(MainActivity.this, MainActivity.class);
        finish();
        overridePendingTransition(0, 0);
        startActivity(refresh);
        overridePendingTransition(0, 0);
        Toast.makeText(MainActivity.this,"data Imported",Toast.LENGTH_SHORT).show();
    }
Автор: RaRa Размещён: 03.03.2017 03:08
Вопросы из категории :
32x32