Android App Entwicklung idoit



  • Hallo,

    für mein Studium (Projektarbeit/Bachelorarbeit) habe ich die Aufgabe, eine Applikation für Android zu schreiben, mit der man auf die Datenbank i-doit zugreifen kann. Dies ist mein erstes Projekt im Bezug auf Android und JSON. Das Dokument mit der technischen Erläuterung der "i-doit JSON RPC API" hilft mir leider nur bedingt weiter. Ich versuche per HTTP Post auf die demo-Datenbank zuzugreifen, jedoch weiß ich nicht, in wiefern ich die params und den api-key bzw. Nick/PW einbinden soll. Ebenfalls weiß ich nicht, ob ich die richtige URL verwende, da ich ständig als Request-Objekt einen Text mit "400 Bad Request"-Nachricht bekomme.

    Folgendermaßen sieht mein Code aus:

    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_startscreen);
    
            //Aufruf der execute-Methode (Ist die übergebene URL  richtig?)
            new DownloadTextTask().execute("http://demo.i-doit.com/src/jsonrpc.php");
    }
    
    public InputStream OpenHttpPOSTConnection(String url){
            InputStream inputStream = null;
            HttpClient httpClient = new DefaultHttpClient();
            try{
    
                HttpPost httpPost = new HttpPost(url);
    
                // HTTP Post Header (Was muss alles per Header mitgegeben werden und stimmt die URL?)
                httpPost.addHeader("Host","http://demo.i-doit.com/src/jsonrpc.php");
                httpPost.addHeader("Content-Type", "application/json-rpc");
                httpPost.addHeader("X-RPC-Auth-Username","admin");
                httpPost.addHeader("X-RPC-Auth-Password","admin");
    
                // JSON Objekt mit Schlüsselwertpaaren (Sind die SWP vollständig und korrekt?)
                JSONObject json = new JSONObject();
                HashMap <string, string="">map = new HashMap();
                map.put("apikey","c1ia5q");
                map.put("objID","4438");
                map.put("catgID", "41");
                json.put("method","cmdb.category");
                json.put("version","2.0");
                json.put("id","1");
                json.put("params",map);
    
                // JSON Objekt an HTTP Post übergeben
                StringEntity params =new StringEntity(json.toString());
                httpPost.setEntity(params);
    
                HttpResponse httpResponse = httpClient.execute(httpPost);
                inputStream = httpResponse.getEntity().getContent();
    
            }catch(Exception e){
                Log.d("OpenHttpPOSTConnection", e.getLocalizedMessage());
            }finally {
                httpClient.getConnectionManager().shutdown();
            }
            return inputStream;
        }
    
        private String DownloadText(String URL){
            int BUFFER_SIZE = 2000;
            InputStream in = null;
            try{
                in = OpenHttpPOSTConnection(URL);
            }catch (Exception e){
                Log.d("Networking", e.getLocalizedMessage());
                return "";
            }
    
            InputStreamReader isr = new InputStreamReader(in);
            int charRead;
            String str = "";
            char[] inputBuffer = new char[BUFFER_SIZE];
            try{
                while ((charRead = isr.read(inputBuffer))>0){
                    String readString = String.copyValueOf(inputBuffer, 0, charRead);
                    str += readString;
                    inputBuffer = new char[BUFFER_SIZE];
                }
                in.close();
            }catch (IOException e){
                Log.d("DownloadText", e.getLocalizedMessage());
                return "";
            }
            return str;
        }
    
        private class DownloadTextTask extends AsyncTask<string, void,="" string="">{
            protected String doInBackground(String... urls){
                return DownloadText(urls[0]);
            }
    
            @Override
            protected void onPostExecute(String result) {
                // Ausgabe des JSON-Objekts vom Server als String im Textfeld der Android-App
                EditText editText = (EditText)findViewById(R.id.editText_output);
                editText.setText(result);
            }
        }</string,></string,> 
    

    Ich wäre sehr dankbar, wenn mir jemand zeigen könnte, wo meine Fehler liegen.


 


Datenschutz / Privacy Policy