2016-04-05 5 views
0

Ich habe 2 Apps, die PDFs in den Asset-Ordnern enthalten. In App A funktioniert der Code einwandfrei, aber in App B funktioniert es nicht. Ich bekomme keine Fehler. Wenn Sie auf die Schaltfläche in App B klicken, öffnet sich Adobe Acrobat, aber ich bekomme einen Toast, der sagt "Diese Datei konnte nicht zugegriffen werden. Überprüfen Sie den Standort oder das Netzwerk und versuchen Sie es erneut". Ich habe sogar das PDF in App A gelegt, um sicherzustellen, dass mit dieser PDF-Datei nichts falsch ist. Es öffnete sich gut in App A.PDF kann nicht aus dem Asset aus der Listenschaltfläche geöffnet werden

Hier ist mein Code für App B. Ich versuche, es über eine Schaltfläche in einer Liste zu öffnen.

[CODE]

public class InteractiveArrayAdapter extends ArrayAdapter<String> { 
private final Context context; 
private final String[] values; 
static final String TAG = InteractiveArrayAdapter.class.getSimpleName(); 

String ta = "helen.pdf"; 
GPXParser mParser = new GPXParser(); 

public InteractiveArrayAdapter(Context context, String[] values) { 
    super(context, R.layout.rowbuttonlayout, values); 
    this.context = context; 
    this.values = values; 
} 

static class ViewHolder { 
    protected TextView text,header, number, web; 
    protected ImageButton web_pic, imageView; 
    ImageView bike, atv, utv; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view = convertView; 
    if (convertView == null) { 
     LayoutInflater inflator = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflator.inflate(R.layout.rowbuttonlayout, null); 
     final ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.header = (TextView) view.findViewById(R.id.header); 
     viewHolder.text = (TextView) view.findViewById(R.id.label); 
     viewHolder.bike = (ImageView) view.findViewById(R.id.bike); 
     viewHolder.atv = (ImageView) view.findViewById(R.id.atv); 
     viewHolder.utv = (ImageView) view.findViewById(R.id.utv); 
     viewHolder.web_pic = (ImageButton) view.findViewById(R.id.web_pic); 
     viewHolder.imageView = (ImageButton) view.findViewById(R.id.check); 
     view.setTag(viewHolder); 
     viewHolder.imageView.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) {   

        Intent myIntent = new Intent(context, MapActivity.class); 

        context.startActivity(myIntent); 
       } 
      }); 
     viewHolder.web_pic.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        copyReadAssets(); 

       }  
      }); 
    } 


    ViewHolder holder = (ViewHolder) view.getTag(); 
    holder.header.setText(values[position]); 
    holder.imageView.setImageResource(R.drawable.map1); 
    holder.web_pic.setImageResource(R.drawable.pdf); 
    holder.bike.setImageResource(R.drawable.bike); 
    holder.atv.setImageResource(R.drawable.atv_2); 
    holder.utv.setImageResource(R.drawable.utv); 

    if (position == 0) { 
     holder.text.setText("17.82 mi"); 



    } 
    if (position == 1) { 


     holder.text.setText("29.09 mi"); 

    } 
    if (position == 2) { 


     holder.text.setText("11.06 mi"); 

    } 


    return view; 
} 
private void copyReadAssets() { 

    AssetManager assetManager =context. getAssets(); 

    InputStream in = null; 
    OutputStream out = null; 
    File file = new File(context.getFilesDir(), ta); 
    try { 
     in = assetManager.open(ta); 
     out = context.openFileOutput(file.getName(), Context.MODE_WORLD_READABLE); 

     copyFile(in, out); 
     in.close(); 
     in = null; 
     out.flush(); 
     out.close(); 
     out = null; 
    } catch (Exception e) { 
     Log.e("tag", e.getMessage()); 
    } 

    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setDataAndType(
     Uri.parse("file://" +context. getFilesDir() + "/"+ta), 
     "application/pdf"); 

    context. startActivity(intent); 
} 

private void copyFile(InputStream in, OutputStream out) throws IOException { 
    byte[] buffer = new byte[1024]; 
    int read; 
    while ((read = in.read(buffer)) != -1) { 
     out.write(buffer, 0, read); 
    } 
} 

} [CODE /]

+0

auch in App B, pdf in Asset-Ordner direkt dort? –

+0

Ja, das PDF befindet sich im Asset-Ordner von App B –

Antwort

0

unten Code Versuchen PDF zu öffnen, ist

in = assetManager.open(ta); 

    String out= Environment.getExternalStorageDirectory().getAbsolutePath() +"/"+ ta); 

    File outFile = new File(out, ta); 


    FileOutputStream oStream = new FileOutputStream(outFile); 
    copyFile(in, oStream); 
+0

Das wird versuchen, von meiner SD-Karte zu öffnen, oder? Ich möchte es aus meinem Asset-Ordner meiner App öffnen. Ich versuchte es und bekam den Toast "die Datei existiert nicht". Ich habe das PDF auf meine SD-Karte verschoben und es von dort geöffnet. Aber das will ich nicht machen ... –

+0

Das hat auch nicht funktioniert. –

+0

Uri.parse ("file: ///" + Kontext. GetFilesDir() + "/" + ta), "application/pdf"); –

Verwandte Themen